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

时间:2015-01-30 15:04:59

标签: html xml 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>

我也尝试了不同的方法来组合文件(其中一些我在stackoverflow上找到),但它们都没有工作,这似乎是最有利的,因为它的简单应该完全符合我的要求。 / p>

我希望我能充分解释我的问题,有人可以帮助我。

祝你好运

马蒂

1 个答案:

答案 0 :(得分:1)

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

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

在您的XSLT中,结果将是一个格式良好的XML文档,其中包含一个根元素。

这个相当神秘的错误消息基本上告诉您第一个结果元素后面的标记与XML规范中的Misc生成不匹配,后者只允许在单个允许的根元素后面添加注释和/或处理指令。 / p>