2015-01-28 2 views
0

Я использую xslt для преобразования xml в xml.шаблон не применяется с XSLT

<root> 
<elem> 
    <confs> 
    <conf1>1</conf1> 
    <conf2>2</conf2> 
    </confs> 
</elem> 
</root> 

Мой XSL

<xsl:template match="elem"> 
<xsl:copy> 
    <xsl:attribute name="className">confs</xsl:attribute> 
    <xsl:apply-templates/> 
</xsl:copy> 
</xsl:template> 

<xsl:template match="confs"> 
<confs> 
    <xsl:for-each select="*"> 
    <conf> 
    <value> 
    <xsl:value-of select="node()"></xsl:value-of> 
    </value> 
    </conf> 
</confs> 
</xsl:template> 

желаемый результат:

<root> 
<elem className="confs> 
    <confs> 
    <conf> 
    <value>1</value> 
    </conf> 
    <conf> 
    <value>1</value> 
    </conf> 
    </confs> 
</elem> 
</root> 

Когда побежал каждый шаблон individaully они хороши. Но я запускаю оба шаблона confs, не затрагивает вообще.

Любая помощь?

+0

'' отсутствует закрывающий тег. –

+0

Кажется, что он работает правильно, см. Http://xsltransform.net/3NzcBt9. Что такое XML, который вы фактически получаете? – potame

ответ

0

Я считаю, что самый простой способ для достижения ваш выход будет по:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<!-- identity transform --> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="elem"> 
    <elem className="confs"> 
     <xsl:apply-templates/> 
    </elem> 
</xsl:template> 

<xsl:template match="confs/*"> 
    <conf> 
     <value> 
      <xsl:value-of select="."/> 
     </value> 
    </conf> 
</xsl:template> 

</xsl:stylesheet> 
+0

Спасибо ... применяемые шаблоны сделали трюк, а не значение – sadhu

Смежные вопросы