XSLT:按元素顺序显示元素
在源xml中,我有元素XSLT:按元素顺序显示元素,xslt,Xslt,在源xml中,我有元素,其内容可能如下所示: <ad> <content>fdsdf</content> <title>gfdgdg</title> </ad> fdsdf gfdgdg 还是像这样 <ad> <content><title>gfdgdg</title></content> <title>gfdgdg
,其内容可能如下所示:
<ad>
<content>fdsdf</content>
<title>gfdgdg</title>
</ad>
fdsdf
gfdgdg
还是像这样
<ad>
<content><title>gfdgdg</title></content>
<title>gfdgdg</title>
<content>fdsdf</content>
</ad>
gfdgdg
gfdgdg
fdsdf
所以我需要不使用硬编码的顺序来渲染元素,比如
<xsl:apply-templates select="title"...">
etc.
这在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>
<ad><content><title>gfdgdg</title></content><title>gfdgdg</title><content>fdsdf</content></ad>
fdsdfgfgdg
结果如下:
<div>fdsdf</div>
<h3>gfdgdg</h3>
<div>
<h3>gfdgdg</h3>
</div>
<h3>gfdgdg</h3>
<div>fdsdf</div>
fdsdf
gfdgdg
当应用于此XML时
<ad><content>fdsdf</content><title>gfdgdg</title></ad>
<ad><content><title>gfdgdg</title></content><title>gfdgdg</title><content>fdsdf</content></ad>
GFDGGFDGFDSDF
结果如下:
<div>fdsdf</div>
<h3>gfdgdg</h3>
<div>
<h3>gfdgdg</h3>
</div>
<h3>gfdgdg</h3>
<div>fdsdf</div>
gfdgdg
gfdgdg
fdsdf
您将以什么格式呈现它们?会是HTML吗?如果是这样的话,如果您给出了一个试图输出的HTML示例,这将有所帮助。非常感谢。每种情况下所需的输出是什么?我希望所有标题元素呈现为h3,所有内容元素呈现为div。那么为什么不
?