如何使用xsl按顺序获取文本节点?

时间:2015-09-05 10:28:56

标签: xml xslt

我想在' fomula'下获得文本节点和元素节点。元素按顺序,将XML转换为HTML。 我在下面展示了XML代码。文字不固定。 (我再次详细编写了代码。)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
    <section>
        <formula>
            m=12n
            <superscript>
                2
            </superscript>
            +3(3n
            <superscript>
                2
            </superscript>
            +2)
        </formula>
        <xxx>
            abc
        </xxx>
        <formula>
            c=a+b
            <superscript>
                4
            </superscript>
        </formula>
    </section>
</root>

我应该写什么XSL来获得下面的结果?

<p>m=12n<span>2</span>+3(3n<span>2</span>+2</p>
<p>abc</p>
<p>c=a+b<span>4</span></p>

当我获得特定的元素节点时,我通常会像下面那样编写XSL。但我不知道如何按顺序获取带有兄弟元素节点的文本节点。 请给我建议。 (我再次详细编写了代码。)

<xsl:template match="/">
    <html>
        --omitted--
        <body>
            <xsl:apply-templates select="/root/section" />
        </body>
    <html>
</xsl:template>
<xsl:template match="section">
    <xsl:for-each select="*">
        <xsl:if test="name()='formula'">
            <xsl:apply-templates select="." />
        </xsl:if>
        <xsl:if test="name()='xxx'">
            <xsl:apply-templates select="." />
        </xsl:if>
    </xsl:for-each>
</xsl:template>
<xsl:template match="formula">
    <p>
        <xsl:apply-templates select="." />
    </p>
</xsl:template>
<xsl:template match="xxx">
    <p>
        <xsl:apply-templates select="." />
    </p>
</xsl:template>

1 个答案:

答案 0 :(得分:3)

您应该查看xsl:templatexsl:apply-templates

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

   <xsl:template match="/">
      <xsl:apply-templates select="/root/section"/>
   </xsl:template>

   <xsl:template match="formula | xxx">
      <p>
         <xsl:apply-templates />
      </p>
   </xsl:template>

   <xsl:template match="superscript">
      <span>
         <xsl:apply-templates />
      </span>
   </xsl:template>

</xsl:stylesheet>

您可以看到working example here

编辑:可能的方法是为您需要的每种特定格式创建模板。所以:

  • &#34;每当我找到formulaxxx元素时,我都会将其内容包含在p元素中&#34;
  • &#34;每当我找到superscript元素时,我都会将其内容包含在span元素中&#34;