在xslt中使用for循环遍历节点

时间:2013-05-23 04:46:52

标签: xml xslt

我有一个xml起草如下

<node1>
  <node2>
    <node3>
      val3
    </node3>
    <node4>
      val4
    </node4>
    <node5>
     val5
    </node5>
    <node6>
      val6
    </node6>
  </node2>
</node1>

我使用xslt循环<node2> 现在,我想在结果中仅包含<node4><node5>的值。 我在做什么

<xsl:for-each select="/node1/node2[.= node4 or .= node5]/*>
  <newNode>
    value of selected nodes
  </newNode>
</xsl:for-each>

也尝试了

<xsl:for-each select="/node1/node2[name() = node4 or name() = node5]/*>
      <newNode>
        value of selected nodes
      </newNode>
    </xsl:for-each>

<xsl:for-each select="/node1/node2[.name()= node4 or .name()= node5]/*>
      <newNode>
        value of selected nodes
      </newNode>
    </xsl:for-each>

但是我获得了所有4个节点的值,即node3,node4,node5和node6

任何人都可以把我放在正确的方向吗?

2 个答案:

答案 0 :(得分:0)

如果您想让node2node4node5以外的所有孩子,请尝试:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="xml"/>

  <xsl:template match="/">
    <xsl:for-each select="/node1/node2">
      <newNode>
        <xsl:apply-templates/>
      </newNode>
    </xsl:for-each>
  </xsl:template>

  <xsl:template match="node4[parent::node2]"/>
  <xsl:template match="node5[parent::node2]"/>

</xsl:stylesheet>

<强>输出:

<newNode>val3 val6</newNode>

答案 1 :(得分:-1)

我自己得到了答案,没有使用模板 上面的答案也可能是正确的 但以下对我来说就像一个魅力

<xsl:for-each select="/node1/node2/*[name()= node4 or name()= node5]>
      <newNode>
        value of selected nodes
      </newNode>
    </xsl:for-each>