这就是问题所在。我有一个 xml 文件,其中有多个标签,取决于谁编写它们,最终可能以任何顺序排列。我需要创建一个 xls 文件来设置它的样式,同时保持标签的原始顺序。这是xml:
<content>
<h>this is a header</h>
<p>this is a paragraph</p>
<link>www.google.com</link>
<h> another header!</h>
</content>
XSLT 不会自行对元素重新排序,除非您告诉它这样做。如果您正在匹配元素,并用其他元素替换它们,它只会按照我找到它们的顺序处理它们。
如果您希望简单地用 HTML 元素替换元素,您只需为每个元素编写一个匹配的模板,在其中输出您需要的 HTML 元素。例如,要将h元素替换为h1元素,您可以这样做
<xsl:template match="h">
<h1>
<xsl:apply-templates select="@*|node()"/>
</h1>
</xsl:template>
h1元素将在原始文档中h元素所在的位置输出。这是完整的 XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
<xsl:template match="content">
<body>
<xsl:apply-templates select="@*|node()"/>
</body>
</xsl:template>
<xsl:template match="h">
<h1>
<xsl:apply-templates select="@*|node()"/>
</h1>
</xsl:template>
<xsl:template match="link">
<a href="{text()}">
<xsl:apply-templates select="@*|node()"/>
</a>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
当应用于您的示例文档时,将输出以下内容
<body>
<h1>this is a header</h1>
<p>this is a paragraph</p>
<a href="www.google.com">www.google.com</a>
<h1> another header!</h1>
</body>