2

考虑以下 XML 结构:

<a>
<b>
    <c>
        <d x="1"/>
        <d x="2"/>
        <d x="3"/>
        <d x="3"/>
        <d x="4"/>
    </c>
</b>
<b>
    <c>
        <d x="1"/>
        <d x="1"/>
        <d x="2"/>
        <d x="3"/>
        <d x="4"/>
        <d x="5"/>
        <d x="5"/>
    </c>
</b>
<b>
    <c>
        <d x="1"/>
        <d x="2"/>
        <d x="3"/>
        <d x="3"/>
        <d x="4"/>
        <d x="5"/>
        <d x="5"/>
    </c>
</b>

我想要一个 XPath 1.0 语句来给我@x 的最小值和最大值?到目前为止,我至少有以下内容:

//a/b/c/d[not(preceding-sibling::d/@x <= @x) and not(following-sibling::d/@x <= @x)]/@x

这是接近,但没有雪茄:-(

非常感谢任何帮助!

谢谢,J

4

2 回答 2

11

要获取最大值,请查找所有没有较小属性值的属性值。如果有多个结果,取第一个 - 它们必须相等。

(//@x[not(. < //@x)])[1]

对于最小值,只需替换<>

出于完整性原因:如果您的 XPath 引擎支持 XPath 2.0(或更好),只需使用可能会更快且更具可读性的max(//@x)尊重。min(//@x)

于 2013-02-27T17:11:40.553 回答
0

我解决了类似的问题,我在单个嵌套的 for-each 循环中处理<b><c>元素,并且我想要获取每个部分中具有最大值的第一个元素的内容。我使用了以下代码:<d>x

<xsl:for-each select="/a/b">
  <!-- do something -->
  <xsl:for-each select="./c">
    <!-- do something -->
    <xsl:value-of select="((./d/@x[not(. &lt; ../../d/@x)])[1])/../." /> 
  </xsl:for-each>
</xsl:for-each>
于 2014-04-28T11:48:34.267 回答