我有以下XSLT结构:
1)我想用XSLT处理的xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<ul>
<li style="xx">option1</li>
<li style="yy">option2</li>
<li style="zz">option3</li>
</ul>
2)主XSLT模板,它调用另外两个模板:
...
<xsl:include href="template1.xsl"/>
<xsl:include href="template2.xsl"/>
<xsl:template match="*">
<xsl:call-template name="template1"/>
<xsl:call-template name="template2"/>
</xsl:template>
...
3)第一个模板(template1.xsl)是:
<xsl:template name="template1">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="//ul">
<xsl:copy>
<xsl:for-each select="@*">
<xsl:copy/>
</xsl:for-each>
<li>added option</li>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
4)第二个(template2.xsl)是:
<xsl:template name="template2">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="//ul/li">
<xsl:copy>
<xsl:for-each select="@*">
<xsl:copy/>
</xsl:for-each>
<xsl:text>PREFIX </xsl:text>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
我希望输出XML文件包含四个<li>
标记,其中添加了选项&#39;应该是第一个,所有<li>
标签应该包含前缀&#34; PREFIX&#34;,而是我得到了:
<?xml version="1.0" encoding="utf-8"?>
<ul>
<li>added option</li>
<li style="xx">PREFIX option1</li>
<li style="yy">PREFIX option2</li>
<li style="zz">PREFIX option3</li>
</ul>
所以问题是第一个元素被添加但是&#39; template2&#39;不适合它。 你能否告诉我为什么会这样?我应该如何更改我的XSLT模板?
答案 0 :(得分:0)
也许你会稍微复杂一点。考虑到您提供的所有信息,不需要命名模板,也不需要单独的样式表。
另请注意以下命名模板:
<xsl:template name="template1">
<xsl:apply-templates/>
</xsl:template>
只会浪费磁盘空间。如果您只是立即调用模板apply templates
(您可以将其视为让XSLT处理器调用它认为合适的任何模板)再次无法使用。
<强>样式表强>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/ul">
<xsl:copy>
<li>
<xsl:text>PREFIX added option</xsl:text>
</li>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="li">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="li/text()">
<xsl:text>PREFIX </xsl:text>
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
<?xml version="1.0" encoding="UTF-8"?>
<ul>
<li>PREFIX added option</li>
<li style="xx">PREFIX option1</li>
<li style="yy">PREFIX option2</li>
<li style="zz">PREFIX option3</li>
</ul>