给出以下XML代码:
<section>
<p>Text...</p>
<p>More text...</p>
<special>Text with formatting</special>
<p>More text..</p>
</section>
我想使用XSLT输出 - 但<special>
标记必须包含HTML标记<pre></pre>
。
无法弄清楚如何让它以正确的顺序显示,并且该部分中包含所有的p元素。帮助赞赏。
答案 0 :(得分:1)
你可以这样做:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="section">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="p">
<xsl:copy>
<xsl:value-of select="."/>
</xsl:copy>
</xsl:template>
<xsl:template match="special">
<xsl:element name="pre">
<xsl:copy>
<xsl:value-of select="."/>
</xsl:copy>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
关键的一点是xsl:元素,它构造了你需要的新元素“pre”。
在以后的问题中,请花些时间来展示您目前为止所做的尝试。而不仅仅是说你无法让它发挥作用。
答案 1 :(得分:1)
我将从身份转换模板
开始<xsl:template match="@* | node()" name="identity">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
然后为需要特殊处理的元素添加模板,例如
<xsl:template match="special">
<pre>
<xsl:call-template name="identity"/>
</pre>
</xsl:template>