在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.
但按顺序和嵌套渲染它们。怎么做?
答案 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>