我正在努力克服XML和XSLt转换,我有以下几点。
<<?xml version="1.0" encoding="utf-8"?>
<playlist>
<song>
<title>Little Fluffy Clouds</title>
<artist>the Orb</artist>
</song>
</playlist>
我想将title和artits组合成一个名为:info
的新节点
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<!--Identity Transform.-->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="title | artits">
<info>
<xsl:value-of select="."/>
</info>
</xsl:template>
</xsl:stylesheet>
以上回报:
<playlist>
<info>Little Fluffy Clouds</info>
<info>the Orb</info>
</playlist>
我需要结合这些,这应该是简单但我不能正确,我想要的是:
<playlist>
<info>Little Fluffy Clouds the Orb</info>
</playlist>
答案 0 :(得分:1)
您可以使用song
的模板,并为其子级的文本节点使用apply-templates,如下所示:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<!--Identity Transform.-->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="song">
<xsl:copy>
<info>
<xsl:apply-templates select="title/text()"/>
<xsl:text> </xsl:text>
<xsl:apply-templates select="artist/text()"/>
</info>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
您也可以使用:
<info>
<xsl:value-of select="concat(title,' ',artist)"/>
</info>