首页 > 解决方案 > XSLT 转换检索元素的子元素及其子元素

问题描述

我正在尝试使用 xslt 转换简单的 xml,但我陷入了非常简单的情况,尽管我找不到任何如何正确解决它的示例。这是我的xml结构:

<TrackList>
   <Track no="1">
      <Title>Tin Man</Title>
   </Track >
   <Track no="2">
      <Title>Good Ol Days</Title>
    </Track >
    <Track no="3">
      <Title>Thing That Break</Title>
    </Track >
</TrackList>

我想从 TrackList 中检索所有曲目,这样我就可以拥有:

<TrackList>
   <Track title=""/>
   <Track title=""/>
   <Track title=""/>
</TrackList>

我尝试了以下 xslt 模板:

<xsl:element name="TrackList">
   <xsl:apply-templates select="TrackList"/>
 </xsl:element>

 <xsl:template match="//TrackList">
    <xsl:element name="Track">
       <xsl:attribute name="title">
          <xsl:value-of select="Track/Title"/>
        </xsl:attribute>
    </xsl:element>
</xsl:template>

虽然我只正确提取了第一个元素,但其余的被忽略了,有人可以解释并建议如何正确检索它。

标签: xmlxslttransformation

解决方案


如果要转换Track元素,请编写模板

  <xsl:template match="Track">
      <Track title="{Title}"/>
  </xsl:template>

对他们来说,通过恒等转换模板处理其余部分:

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

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="Track">
      <Track title="{Title}"/>
  </xsl:template>

</xsl:stylesheet>

https://xsltfiddle.liberty-development.net/94hvTz3


推荐阅读