代码之家  ›  专栏  ›  技术社区  ›  Jeremy French

检查节点是否是其父节点的前X个子节点之一的XSLT测试

  •  7
  • Jeremy French  · 技术社区  · 16 年前

    我正在编辑一个XSLT模板,我的技能有点生疏。

    我想写一个条件,看看当前节点是否在其父节点的前三个子节点中。

    <parent>
     <child>
     <child>
     <child>
     <child>
    </parent>
    

    所以上面的前三个子元素将返回true,而第四个将返回false,使事情复杂化的是,子元素不会都是相同的,并且会有自己的后代。我确信有一些简单的XPath可以做到这一点。

    2 回复  |  直到 12 年前
        1
  •  19
  •   Tomalak    16 年前

    这取决于情况。如果你在

    <xsl:apply-templates select="/parent/child" />
    

    然后检查

    <xsl:if test="position() &lt; 4">
    

    会的。如果你在另一个环境中,一个不影响所有人的环境 <child> 元素,然后 position() 将参考内部位置 那个 语境。

    如果要进行上下文无关检查,可以使用:

    <xsl:if test="count(preceding-sibling::child) &lt; 3">
    <!-- or -->
    <xsl:if test="count(preceding-sibling::*) &lt; 3">
    

    选择 只有前三个 <儿童与成人; 元素,这就是它:

    /parent/child[position() &lt; 4]
    
        2
  •  0
  •   Dave Jarvis James Eichele    12 年前

    打电话给 position() 函数确定文档中存在节点的位置。