我有一个像这样的xml:
<main>
text1 <tag>2</tag> text3
</main>
应该通过XSLT转换为:
<newMain>
text1 <tag2>2</tag2>text3
</newMain>
但我不知道如何得到它。 你能救我吗?
由于
兰德
答案 0 :(得分:0)
<xsl:template match="main | tag">
<xsl:element name="{name()}2">
<xs:apply-templates/>
</xsl:element>
</xsl:template>
如果你只是想在元素的名称附加“2”,就足够了。如果你想从内容中取出元素“tag”的数字,那就行了。
<xsl:template match="main">
<xsl:element name="{name()}2">
<xs:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="tag">
<xsl:element name="{name()}{.}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
答案 1 :(得分:0)
此转化:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<my:reps>
<rep old="main" new="newMain"/>
<rep old="tag" new="tag2"/>
</my:reps>
<xsl:variable name="vReps" select="document('')/*/my:reps/*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match=
"*[name() = document('')/*/my:reps/*/@old]">
<xsl:element name="{$vReps[@old = name(current())]/@new}">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
应用于提供的XML文档:
<main>
text1 <tag>2</tag> text3
</main>
生成想要的正确结果:
<newMain>
text1 <tag2>2</tag2> text3
</newMain>