0

我有一个如下起草的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

任何人都可以让我朝着正确的方向前进吗?

4

2 回答 2

0

如果你想得到node2exceptnode4和的所有孩子node5,你应该尝试:

<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>
于 2013-05-23T05:16:21.150 回答
-1

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

<xsl:for-each select="/node1/node2/*[name()= node4 or name()= node5]>
      <newNode>
        value of selected nodes
      </newNode>
    </xsl:for-each>
于 2013-05-23T06:05:25.470 回答