使用xpath和xslt测试兄弟元素的数字属性值

时间:2016-08-26 20:39:26

标签: xml xslt xpath

我坚持使用xPath表达式以及如何在XSLT中呈现它。我很乐意帮忙。

来源

“item”元素的平面堆栈:

<list>
    <item outline="3" name="grumpy"/>
    <item outline="5" name="monarchists"/>
    <item outline="9" name="dispatch"/>
    <item outline="3" name="parkour"/>
    <item outline="3" name="elves"/>
    <item outline="9" name="hunting"/>
    <item outline="9" name="clueless"/>
    <item outline="3" name="xPath"/>
    <item outline="2" name="newbs"/>
</list>

TEST

前一个元素的“outline”属性的值是否大于当前元素的“outline”属性的值?

如果是,请将当前“item”元素“outline”属性的值更改为1。

失败的XPATH

我无法通过初步测试...

<xsl:when test="preceding::item[1][@outline &gt; @outline]">

渴望输出

<list>
    <item outline="1" name="grumpy"/>
    <item outline="5" name="monarchists"/>
    <item outline="9" name="dispatch"/>
    <item outline="1" name="parkour"/>
    <item outline="3" name="elves"/>
    <item outline="9" name="hunting"/>
    <item outline="9" name="clueless"/>
    <item outline="1" name="xPath"/>
    <item outline="1" name="newbs"/>
</list>

请同时推荐XSLT。

谢谢!

1 个答案:

答案 0 :(得分:0)

使用

<xsl:template match="item[preceding-sibling::item[1]/@outline > @outline]/@outline">
  <xsl:attribute name="outline">1</xsl:outline>
</xsl:template>

加上身份转换模板。