XSLT:如何遍历具有多个相同子节点的唯一节点,并仅选择一个特定子节点

时间:2018-02-20 08:00:54

标签: xslt xslt-1.0

尝试通过此代码块使用for-each循环将所有3个值返回到一个输出中。如何只选择其中一个元素,比如Elise的数据呢?

<A>
  <B>
    <C>
      <Name>Jonathan</Name>
      <Age>56</Age>
      <Sex>Male</Sex>
    </C>
    <C>
      <Name>Elise</Name>
      <Age>50</Age>
      <Sex>Female</Sex>
    </C>
    <C>
      <Name>Adam</Name>
      <Age>47</Age>
      <Sex>Male</Sex>
    </C>
  </B>
</A>

2 个答案:

答案 0 :(得分:1)

如果要为Elise选择节点集,则可以相应地匹配模板。

<xsl:template match="C[Name='Elise']">
    <xsl:copy>
        <xsl:copy-of select="*" />
    </xsl:copy>
</xsl:template>

上述模板将选择具有子节点C的节点Name,其值为Elise。然后,它将复制节点C和所有子节点,以提供如下输出。

<C>
    <Name>Elise</Name>
    <Age>50</Age>
    <Sex>Female</Sex>
</C>

P.S。请更正结束标记的共享XML,因为它看起来像是复制粘贴问题。 XML不是一个格式良好的。

答案 1 :(得分:0)

Using Anikets' respose I figured that my solution was to call the subnode from its 'hidden' index:

<xsl:for-each select="($A/B/C/Name)[2]">
    <print>
      <xsl:value-of select="."/>
    </print>
</xsl:for-each>

以上只返回值'Elise'