使用 XSLT 连接两个 xml/html 文件

Concatenate two xml/html Files with XSLT

我正在尝试连接两个文件。其中一个 XML,另一个 HTML。我可能犯了一个愚蠢的错误,我对处理 XSLT 不是很熟悉。

我将 XSL 文件应用到 XML 文件,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<REPORT>
   <YASCA />
   <AOSCAT />
</REPORT>

这就是 XSL 文件的样子:

<?xml version="1.0"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml"/>
        <xsl:template match="//YASCA">
            <xsl:copy>
                <xsl:copy-of select="document('abc.xml')"/>
            </xsl:copy>
        </xsl:template>
        <xsl:template match="//AOSCAT">
            <xsl:copy>
                <xsl:copy-of select="document('xyz.html')"/>
            </xsl:copy>
        </xsl:template>
</xsl:transform>

这是我在应用 XSLT 并尝试保存创建的文档后从 AltovaXMLSpy 得到的错误消息:

XML Production Error: Character 'A' following the text '<' does not fulfill production 'Misc'.

它出现在文件中第一个标签(XML 文件内容的容器)和第二个标签(HTML 文件内容的容器)结束的位置文件)开始。

</YASCA><AOSCAT>

我也尝试了不同的文件组合方法(其中一些是我在 Whosebug 上找到的),但其中 none 有效并且这似乎是最有利的,因为它很简单应该完全符合我的要求.

我希望我充分解释了我的问题并且有人可以帮助我。

此致

马蒂

一般来说 HTML 不是 XML 并且您将无法成功使用 document('file.html')。但在你的情况下,操作似乎有效,但你未能确保你的根元素被复制,所以你最终在结果文档中得到两个顶级元素,然后不是 XML 因为需要一个根元素。所以添加

<xsl:template match="/*">
  <xsl:copy>
    <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>

在您的 XSLT 中,结果将是一个格式正确的 XML 文档,只有一个根元素。

那个相当神秘的错误消息基本上告诉您第一个结果元素后面的标记与 XML 规范中的 Misc 生产不匹配,该规范只允许注释 and/or 处理指令遵循单个允许的根元素。