XSLT:按顺序显示元素

时间:2014-06-08 15:52:07

标签: xslt

在source xml中,我有元素<ad>,其内容可能是这样的:

<ad>
    <content>fdsdf</content>
    <title>gfdgdg</title>
</ad>

或者像这样

<ad>
    <content><title>gfdgdg</title></content>
    <title>gfdgdg</title>
    <content>fdsdf</content>
</ad>

所以我需要渲染不使用像

这样的硬编码顺序的元素
<xsl:apply-templates select="title"...">
etc. 

但按顺序和嵌套渲染它们。怎么做?

1 个答案:

答案 0 :(得分:2)

这在XSLT中实际上非常简单,因为您可以使用其内置模板,这些模板将按照它们在文档中出现的顺序迭代文档中的节点。

您需要做的就是为要转换的元素编写匹配的模板。

试试这个XSLT

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

    <xsl:template match="title">
        <h3>
            <xsl:apply-templates select="@*|node()"/>
        </h3>
    </xsl:template>

    <xsl:template match="content">
        <div>
            <xsl:apply-templates select="@*|node()"/>
        </div>
    </xsl:template>
</xsl:stylesheet>

请注意,如果您的XML具有XSLT中没有匹配模板的节点,则内置模板将不会输出该节点,但会继续处理其子节点,直到它找到匹配的模板或文本节点,在这种情况下,它将自己输出文本。

应用于此XML

<ad><content>fdsdf</content><title>gfdgdg</title></ad>

输出如下:

<div>fdsdf</div>
<h3>gfdgdg</h3>

应用于此XML

<ad><content><title>gfdgdg</title></content><title>gfdgdg</title><content>fdsdf</content></ad>

输出如下:

<div>
   <h3>gfdgdg</h3>
</div>
<h3>gfdgdg</h3>
<div>fdsdf</div>