-2

这就是问题所在。我有一个 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>
4

1 回答 1

0

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>
于 2012-08-02T12:08:02.867 回答