gpt4 book ai didi

xml - 需要XPath帮助-根据数字范围选择节点

转载 作者:行者123 更新时间:2023-12-03 16:18:28 27 4
gpt4 key购买 nike

我很沮丧-如果可能的话,我想使用XPath解决此问题,因为它将简化一些支持Java代码。我的文档结构如下:

<table>
<row id="a">
<data-point value="0">5</data-point>
<data-point value="15">4</data-point>
<data-point value="30">2</data-point>
<data-point value="45">0</data-point>
</row>
<row id="b">
<data-point value="0">8</data-point>
<data-point value="10">6</data-point>
<data-point value="20">4</data-point>
<data-point value="30">0</data-point>
</row>
</table>


该选择基于输入值。例如,如果inputValue = 17,我需要选择括号中的值的数据点-在这种情况下,请选择value =“ 15”和“ 30”的数据点。同样,如果该值为32,则选择数据点“ 30”和“ 45”。

如果数字完全匹配其中一个数据点,则可以只返回匹配的数据点,也可以返回该数据点和下一个或上一个数据点(只要返回匹配的数据点就没有关系)。因此,如果inputValue为15,则可以选择值为“ 15”和“ 30”,“ 0”和“ 15”或仅为“ 15”的数据点。

XPath还必须考虑到row元素的选择器

我已经尝试了以下跟随,last()等多种组合,但似乎无法磨练合适的XPath。那里的专家谁可以提出一个好的XPath?

以下解决方案已接近尾声,但在某些情况下仍然失败。以下XPath假定输入选择是针对行id =“ a”和inputValue为20的:

/table/row[@id='a']/data-point[(20 >= number(@value) or 20 <= number(@value)) and following-sibling::*[1]/@value > 20]

最佳答案

您在注释中提到您拥有XPath 2.0,因此可以使用min和max函数。假设$row是目标行ID,而$val是目标值:

/table/row[@id = $row]/data-point[@value = (
min(../data-point/@value[. ge $val]), max(../data-point/@value[. le $val])
)]


这将找到最低的上限和最大的下限 @value(如果碰巧完全匹配,它们可能是相同的),并提取它们相应的 data-point元素。

即使输入中的值不是升序,这也将起作用。

关于xml - 需要XPath帮助-根据数字范围选择节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23230206/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com