早上好, 我正在尝试编写一个XSLT 1.0 trasformation来转换这个
<foo>
<document>
<content name="bar1">Bar1</content>
<content name="bar2">Bar2</content>
<content name="bar3">Bar3</content>
...
</document>
</foo>
到这个
<foo>
<document>
<content name="bar1" set="top">Bar1</content>
<content name="bar2" set="top">Bar2</content>
<content name="bar3" set="top">Bar3</content>
...
</document>
</foo>
所以我尝试了这个XSLT转换
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<foo>
<document>
<xsl:template match="/document/*">
<xsl:copy>
<xsl:apply-templates />
<xsl:attribute name="set" select="'top'" />
</xsl:copy>
</xsl:template>
</document>
</foo>
但遗憾的是它不起作用
我已尝试在xpath和xslt指南中搜索很多内容,但我无法完成这项工作,有人可以帮助我吗?
答案 0 :(得分:0)
您的XSLT语法已关闭。有很多方法可以做到这一点,这是一种相当通用的方式:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="content">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:attribute name="set">top</xsl:attribute>
<xsl:value-of select="." />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
第一个模板是身份模板;第二个模板匹配content
个节点,复制它们及其属性,并添加属性set="top"
和元素的内容。