2010-05-27 51 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