2011-10-29 3 views
0

У меня есть XML, как это:XSLT: разбор текста с тегом

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

должны быть преобразованы с помощью XSLT в:

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

, но я не знаю, как получить его. Вы можете мне помочь?

Благодаря

Rand

+0

Вы хотите сделать это для этого конкретного случая? Или 2 в main2 получает свое значение из содержимого тега? – 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> 
Смежные вопросы