Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XSLT:按元素顺序显示元素_Xslt - Fatal编程技术网

XSLT:按元素顺序显示元素

XSLT:按元素顺序显示元素,xslt,Xslt,在源xml中,我有元素,其内容可能如下所示: <ad> <content>fdsdf</content> <title>gfdgdg</title> </ad> fdsdf gfdgdg 还是像这样 <ad> <content><title>gfdgdg</title></content> <title>gfdgdg

在源xml中,我有元素
,其内容可能如下所示:

<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。那么为什么不