【问题标题】:Using xpath and xslt to test the numeric attribute values of sibling elements使用xpath和xslt测试兄弟元素的数值属性值
【发布时间】:2016-08-26 20:39:26
【问题描述】:

我陷入了 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>

测试

前一个元素的“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。如果我从 test="preceding::item[1]" 得到错误,我将值 1 添加到第一个元素。除了第一项之外,它遵循规则,不是吗?

标签: xml xslt xpath


【解决方案1】:

使用

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

加上身份转换模板。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多