我想使用XSLT做一些简单的事情(或者我认为)。 我想将元素列表拆分为两个,使用重命名元素 想法是xml形成如下:
<elem at="value" id="something"/>
<elem at="value" id="something2"/>
<elem at="random" id="something3"/>
将转换为:
<elemVal id="something"/>
<elemVal id="something2"/>
<elemRa id="something3"/>
(新元素名称是静态的) 因此,元素将根据属性的值重命名。
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="elem/@at[.='value']">
<xsl:element name="elemVa">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
到目前为止,我有一个身份模板,但我不明白我如何倒退并更改元素名称,保留其内容。
答案 0 :(得分:4)
而不是
<xsl:template match="elem/@at[.='value']">
你需要
<xsl:template match="elem[@at ='value']">
然后创建新元素(文字就足够了)并确保未处理at
属性:
<xsl:template match="elem[@at ='value']">
<elemVa>
<xsl:apply-templates select="@* except @at | node()"/>
</elemVa>
</xsl:template>
以上是XSLT / XPath 2.0,在1.0中你可以使用
<xsl:template match="elem[@at ='value']">
<elemVa>
<xsl:apply-templates select="@*[not(local-name() = 'at')] | node()"/>
</elemVa>
</xsl:template>