我正在尝试用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>
虽然我只是正确地提取了第一个元素但其余部分被忽略了,但是有人可以解释并建议如何正确地检索它。
答案 0 :(得分:1)
如果要转换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>
答案 1 :(得分:0)
<xsl:template match="TrackList">
<xsl:element name="TrackList">
<xsl:for-each select="Track">
<xsl:element name="Track">
<xsl:attribute name="title">
<xsl:value-of select="Title"/>
</xsl:attribute>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>