我想从嵌套部分分别渲染xml的非嵌套部分。例如,可以渲染这个xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="para.xsl"?>
<paragraph>Introduction
<list>
<element>First</element>
<element>Second</element>
</list>
</paragraph>
作为
<p>Introduction
<ul>
<li>First</li>
<li>Second</li>
</ul>
</p>
我的样式表(不起作用)是
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates select="paragraph" />
</xsl:template>
<xsl:template match="paragraph" >
<p><xsl:value-of select="*[not(list)]"/></p>
<xsl:apply-templates select="list" />
</xsl:template>
<xsl:template match="list" >
<ul><xsl:apply-templates select="element"/></ul>
</xsl:template>
<xsl:template match="element" >
<li><xsl:value-of select="."/></li>
</xsl:template>
</xsl:stylesheet >
呈现为
<p>
First
Second
</p>
<ul>
<li>First</li>
<li>Second</li>
</ul>
答案 0 :(得分:1)
我想将xml的非嵌套部分与。分开 嵌套部分。
嵌套没有问题,因为这需要处理 XSLT processing model 和 XSLT built-in templates - 请阅读有关这些主题的更多内容或观看 XSLT training course 。您只需覆盖内置模板,如下所示。
就这么简单:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="paragraph">
<p><xsl:apply-templates/></p>
</xsl:template>
<xsl:template match="list">
<ul><xsl:apply-templates/></ul>
</xsl:template>
<xsl:template match="element">
<li><xsl:apply-templates/></li>
</xsl:template>
</xsl:stylesheet>