XML文档到XHTML文档的XSLT转换
这是我的模板:XML文档到XHTML文档的XSLT转换,xslt,text,Xslt,Text,这是我的模板: <xsl:template name="rec"> <xsl:for-each select="*"> <div class="{local-name()}"> <xsl:for-each select="@*"> <xsl:attribute name="data-{local-name()}"> <xsl:value-of select="."/>
<xsl:template name="rec">
<xsl:for-each select="*">
<div class="{local-name()}">
<xsl:for-each select="@*">
<xsl:attribute name="data-{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
<xsl:value-of select="text()" />
<xsl:call-template name="rec" />
</div>
</xsl:for-each>
</xsl:template>
如果有这样一份文件:
<test>
<item value="1">Item 1 Text</item>
<item value="2">Item 2 Text</item>
</test>
上述转换将把它转换为:
<div class="test">
<div class="item" data-value="1">Item 1 Text</div>
<div class="item" data-value="2">Item 2 Text</div>
</div>
我遇到的问题是,这种转换没有正确地考虑文本节点,而且我没有足够的XSLT背景来解决它。问题是:给定这样的xml:
<para>This is a <emphasis>paragraph</emphasis> people!</para>
我希望看到以下输出:
<div class="para">This is a <div class="emphasis">paragraph</div> people!</div>
问题是我没有明白-我明白了:
<div class="para">This is a <div class="emphasis">paragraph</div></div>
注意那些失踪的“人!”文本节点。如何修复上面的XSLT以提供所需的输出?一个问题是
<xsl:value-of select="text()" />
产生所需的输出:
<div class="test">
<div class="item" data-value="1">Item 1 Text</div>
<div class="item" data-value="2">Item 2 Text</div>
<div class="para">This is a <div class="emphasis">paragraph</div> people!</div>
</div>
一个问题是
<xsl:value-of select="text()" />
产生所需的输出:
<div class="test">
<div class="item" data-value="1">Item 1 Text</div>
<div class="item" data-value="2">Item 2 Text</div>
<div class="para">This is a <div class="emphasis">paragraph</div> people!</div>
</div>
我想我明白你在这里干什么了这确实产生了我想要的效果-非常感谢!我想我明白你在这里干什么了这确实产生了我想要的效果-非常感谢!
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="*">
<div class="{local-name()}">
<xsl:for-each select="@*">
<xsl:attribute name="data-{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
<xsl:apply-templates />
</div>
</xsl:template>
</xsl:stylesheet>
<test>
<item value="1">Item 1 Text</item>
<item value="2">Item 2 Text</item>
<para>This is a <emphasis>paragraph</emphasis> people!</para>
</test>
<div class="test">
<div class="item" data-value="1">Item 1 Text</div>
<div class="item" data-value="2">Item 2 Text</div>
<div class="para">This is a <div class="emphasis">paragraph</div> people!</div>
</div>