这是问题所在。我有一个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>
答案 0 :(得分:0)
XSLT不会自行重新排序元素,除非你告诉它这样做。如果你匹配元素,并用其他元素替换它们,它将按照我找到的顺序处理它们。
如果您希望简单地用HTML元素替换元素,您只需为每个元素编写匹配的模板,您可以在其中输出所需的HTML元素。例如,要用 h1 元素替换 h 元素,您可以执行此操作
<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>