2011-10-29 60 views
0

解析文本我有一个这样的XML:XSLT:与标签

<main> 
text1 <tag>2</tag> text3 
</main> 

应通过XSLT中要变换:

<newMain> 
text1 <tag2>2</tag2>text3 
</newMain> 

,但我不知道如何得到它。 你能帮我吗?

感谢

兰德

+0

你想为这个特殊情况做这件事吗?或者main2中的2从标签内容中获得它的值? – FailedDev

+0

对不起我的错:main2和'2'没有任何关系。我改变了上面的XML。 – Randomize

回答

0
<xsl:template match="main | tag"> 
    <xsl:element name="{name()}2"> 
    <xs:apply-templates/> 
    </xsl:element> 
</xsl:template> 

就足够了,如果你只是想追加 “2” 的元素的名称。如果你想从内容中获取元素“标签”的数字,那么做例如

<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> 
+0

对不起我的错:main2和'2'没有任何关系。我改变了上面的XML。 – Randomize

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>