【问题标题】:xpath 1 and xpath 2 return different results when determining min and max valuexpath 1 和 xpath 2 在确定最小值和最大值时返回不同的结果
【发布时间】:2012-11-02 11:28:19
【问题描述】:

我有以下关于 XPATH1 和 XPATH2 的问题:

<document>
    <val>3</val>
    <val>11</val>
    <val>3</val>
    <val>2</val>
    <val>12</val>
    <val>5</val>
    <val>0</val>
    <val>7</val>
</document>

xpath1: 最大值

//val[not(. < //val)]

分钟:

//val[not(. > //val)]

xpath2:

document/val[. = max(//val)]

document/val[. = min(//val)]

为什么我在使用 xpath1-max 查询的 XPATH2 处理中得不到相同的结果:

//val[not(. < //val)]

似乎我得到了 LAST 节点(val 7),但不是最高值……相反,MIN 值适用于 XPATH2 处理:

//val[not(. > //val)]

有人可以帮我吗?

【问题讨论】:

    标签: xpath max min xpath-2.0


    【解决方案1】:

    很好的观点。

    在 xpath 1(和 xslt 1.0)中,//val[not(. &lt; //val)] 固有地将文本值转换为数字,并对数字进行比较。

    因此,您会得到正确的最小值和最大值。

    但是,在 xpath 2(和 xslt 2.0)中,文本不会转换为数字,而是进行字符串比较。所以使用字符串比较,'7' > '12',因此 7 仍然是最高值(它不只返回列表中的最后一个值 - 尝试交换值的顺序)

    因此,为了确保 xslt 1 和 2 中的安全,您应该使用 number() function 对文本进行强制转换,以确保完成数字比较。

    最大:

    //val[not(number(.) &lt; //val)]
    

    分钟:

    //val[not(number(.) &gt; //val)]
    

    在样式表中使用 Saxon:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="2.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
        <xsl:output method="xml" indent="yes"/>
    
        <xsl:template match="/">
            <x>
                <Max1>
                    <xsl:value-of select="//val[not(number(.) &lt; //val)]" />
                </Max1>
                <Min1>
                    <xsl:value-of select="//val[not(number(.) &gt; //val)]" />
                </Min1>
                <Max2>
                    <xsl:value-of select="/document/val[. = max(//val/text())]" />
                </Max2>
                <Min2>
                    <xsl:value-of select="/document/val[. = min(//val/text())]" />
                </Min2>
            </x>
        </xsl:template>
    </xsl:stylesheet>
    

    返回

    <x>
       <Max1>12</Max1>
       <Min1>0</Min1>
       <Max2>12</Max2>
       <Min2>0</Min2>
    </x>
    

    正如预期的那样。

    【讨论】:

    • 哇,很好的解释;非常感谢,这对我有帮助!
    猜你喜欢
    • 1970-01-01
    • 2022-01-12
    • 2013-01-17
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多