使用格式化循环XML内容

时间:2013-11-20 10:56:52

标签: xml xslt

给出以下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元素。帮助赞赏。

2 个答案:

答案 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>