2017-01-03 61 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()"/> 
相關問題