使用节点号查询XML

时间:2010-05-27 14:49:32

标签: c# xml

好的,所以我正在编写一个使用Microsoft的XML diff补丁工具比较2个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中节点的最佳方法是什么?

更新:嗯...我似乎无法在XmlDiff和XmlDiffPatch.View示例之外找到XmlDiffPatch.View的源代码。当前的XmlDiffPatch.View类只提供“GetHtml”,如果你想使用它们的输出样式,这很好,但不能用于我需要做的事情。理想情况下,我想添加一个方法,只返回差异的XML,并指出添加,更改或删除的内容。然后使用一些XSLT,我可以以任何我想要的方式查看它(或者用它来做其他事情)。

所以,问题得到了回答 - 这肯定适用于我的要求,但我想知道是否有人看过那里的来源?

1 个答案:

答案 0 :(得分:0)

你会在这里找到答案:

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

正如他们所说“解析此代码并应用diffgram中指定的更改并非易事

你需要了解diffgram格式才能做你想做的事情,但它就在那里。

XPath / DOM问题听起来像是一条死胡同 - 它们是关于如何处理完成,而你似乎被困在处理的上差异。