XPath 1.0代码选择了错误的最大值

XPath 1.0代码选择了错误的最大值,xpath,Xpath,我试图使用XPath1.0来选择XML文档中的最大双精度值。我知道XPath 1.0不支持Max函数,这将使这非常容易,但我使用的系统只支持XPath 1.0函数 由于长度原因,我无法发布整个文件,但以下是我正在扫描的文档示例: 我尝试了以下XPath表达式: /site/forecast/datum[not(primary < preceding-sibling::datum/primary) and not (primary < following-sibling::datum/

我试图使用XPath1.0来选择XML文档中的最大双精度值。我知道XPath 1.0不支持Max函数,这将使这非常容易,但我使用的系统只支持XPath 1.0函数

由于长度原因,我无法发布整个文件,但以下是我正在扫描的文档示例:

我尝试了以下XPath表达式:

/site/forecast/datum[not(primary < preceding-sibling::datum/primary) and not (primary < following-sibling::datum/primary)]
/site/forecast/datum[非(主要<前面的兄弟姐妹::datum/primary)和非(主要<后面的兄弟姐妹::datum/primary)]
但不管怎样,它都返回错误的数据。它总是返回:

<datum>
    <valid timezone="UTC">2019-04-04T06:00:00-00:00</valid>
        <primary name="Stage" units="ft">9.80</primary>
        <secondary name="Flow" units="cfs">3010.00</secondary>
        <pedts>HGIFE</pedts>
</datum>

2019-04-04T06:00:00-00:00
9.80
3010
HGIFE
我希望它返回具有最大“初级阶段”值的元素,如:

<datum>
    <valid timezone="UTC">2019-03-28T18:00:00-00:00</valid>
        <primary name="Stage" units="ft">13.10</primary>
        <secondary name="Flow" units="cfs">13400.00</secondary>
        <pedts>HGIFE</pedts>
</datum>

2019-03-28 18:00:00-00:00
13.10
13400
HGIFE

我知道它将返回所有13.10初级阶段的学生,但没关系。我将选择它返回的第一个值,如果我能将其返回到该点。

请注意,您可能有多个最大值。使用:

/site/forecast/datum[not(primary < ../datum/primary)][1]
/site/forecast/datum[not(primary<../datum/primary)][1]
这将选择元素

<datum> 
  <valid timezone="UTC">2019-03-28T18:00:00-00:00</valid>  
  <primary name="Stage" units="ft">13.10</primary>  
  <secondary name="Flow" units="cfs">13400.00</secondary>  
  <pedts>HGIFE</pedts> 
</datum>

2019-03-28 18:00:00-00:00
13.10
13400
HGIFE

中进行测试。请注意,您可能有多个最大值。使用:

/site/forecast/datum[not(primary < ../datum/primary)][1]
/site/forecast/datum[not(primary<../datum/primary)][1]
这将选择元素

<datum> 
  <valid timezone="UTC">2019-03-28T18:00:00-00:00</valid>  
  <primary name="Stage" units="ft">13.10</primary>  
  <secondary name="Flow" units="cfs">13400.00</secondary>  
  <pedts>HGIFE</pedts> 
</datum>

2019-03-28 18:00:00-00:00
13.10
13400
HGIFE
测试一下