2017-01-03 64 views
0

我想比较两个XML文件并想知道这两个文件是否相同。但我想忽略内在的文字差异。应该说,如果结构有所不同,即添加了一些新标签,它就会有所不同。如何比较2个xml文件知道它是否相同

我试过XML Diff,但是我没有得到一个选项来忽略XmlDiffOptions中的内部文本。

我什至试过how-would-you-compare-two-xml-documents的答案,但没有为我工作。

+2

不知道会是多少意义作出忽略内部文本:/也许你可以预处理doument,删除所有你要忽略,然后使用的xmldiff内部文本API? – gideon

回答

1

通常,“忽略ZZZ时比较两个XML文件”的最简单方法是转换两个文件以消除ZZZ,然后使用标准比较方法(例如XPath deep-equal()函数或规范化后跟字符串比较)。

在你的情况下,如果ZZZ是“文本节点的内容”,使用XSLT转换这两个文件以消除文本节点,然后进行比较。例如(XSLT 2.0):

<xsl:template name="main"> 
    <result><xsl:value-of 
    select="deep-equal(f:prep($doc1), f:prep($doc2))"/> 
    </result> 
</xsl:template> 

<xsl:function name="f:prep" as="document-node"> 
    <xsl:param name="doc" as="document-node()"/> 
    <xsl:apply-templates/> 
</xsl:function> 

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

<xsl:template match="text()"/> 
相关问题