2010-05-27 52 views
1

好吧,所以我正在編寫一個實用程序,使用Microsoft的XML diff修補工具比較2個XML文檔。使用節點號查詢XML

結果看起來是這樣的:

<?xml version="1.0" encoding="utf-16"?> 
    <xd:xmldiff version="1.0" srcDocHash="10728157883908851288" options="IgnoreChildOrder IgnoreComments IgnoreWhitespace " fragments="yes" xmlns:xd="http://schemas.microsoft.com/xmltools/2002/xmldiff"> 
    <xd:node match="1"> 
    <xd:node match="1"> 
     <xd:node match="1"> 
     <xd:node match="2"> 
     <xd:node match="1"> 
     <xd:node match="1"> 
      <xd:node match="2"> 
      <xd:change match="1">testi22n2123</xd:change> 
      </xd:node> 
     </xd:node> 
     <xd:add match="/1/1/1/2/1/8" opid="1" /> 
     <xd:node match="7"> 
     <xd:node match="1"> 
      <xd:change match="1">31</xd:change> 
     </xd:node> 
     <xd:node match="2"> 
      <xd:change match="1">test2ing</xd:change> 
     </xd:node> 
     </xd:node> 
     <xd:remove match="8" opid="1" /> 
     </xd:node> 
     </xd:node> 
    </xd:node> 
    </xd:node> 
    </xd:node> 
    <xd:descriptor opid="1" type="move" /> 
    </xd:xmldiff> 

我想要做的就是去回源文件,並獲取表示差的源數據。我最初嘗試創建一個Xpath查詢,但據我現在瞭解,這個XmlDiff的東西在DOM上工作......這好像是現在XML對象的恐龍。

通過使用diff結果中提供的數字來獲取源XML中節點的最佳方式是什麼?

更新:嗯......我似乎無法找到XmlDiffPatch.View,XmlDiff和XmlDiffPatch.View示例以外的源代碼。當前的XmlDiffPatch.View類只提供「GetHtml」,如果你想使用它們的輸出風格,這很好,但不能用於我需要做的事情。理想情況下,我想添加一個只返回差異XML的方法,並指出添加,更改或刪除的內容。然後使用一些XSLT,我可以以任何我想要的方式查看它(或者用它來做其他事情)。

所以,這個問題得到了回答 - 這絕對適用於我所問的內容,但我想知道是否有人看到了源代碼?

回答

0

你會在這裏找到答案:

http://msdn.microsoft.com/en-us/library/aa302295.aspx#xmldif_topic3

正如他們所說的「分析這個代碼,並應用在指定的DiffGram的變化是不平凡的

你需要了解diffgram格式來做你想做的事情,但它全在那裏。

中的XPath/DOM問題聽起來像是你一個死衚衕 - 它們是關於如何處理完成,而你似乎粘在處理的DiffGram什麼

+0

感謝您的鏈接,現在深入挖掘......我一直在想,我可以將這些數字包含在Xpath表達式中,但現在看起來它絕對是一個「如何」而不是「什麼」 。 – 2010-05-27 15:40:28