Ms word 正在尝试选择Word文档中的所有XMLNodes

Ms word 正在尝试选择Word文档中的所有XMLNodes,ms-word,ms-office,Ms Word,Ms Office,我正在为MicrosoftWordC制作一个插件,我想获得文档存储在其中的所有XMLNodes,因为它是一个DOCX文件 Word的API有一个SelectNodes函数,该函数采用xpath,但当我尝试不同的参数时,我会得到null。我现在正在尝试选择所有节点,因此我不认为这是一个名称空间问题,但我可能错了。以下是相关代码: using Word = Microsoft.Office.Interop.Word; Word.XMLNodes docNodes = Doc.SelectNodes(

我正在为MicrosoftWordC制作一个插件,我想获得文档存储在其中的所有XMLNodes,因为它是一个DOCX文件

Word的API有一个SelectNodes函数,该函数采用xpath,但当我尝试不同的参数时,我会得到null。我现在正在尝试选择所有节点,因此我不认为这是一个名称空间问题,但我可能错了。以下是相关代码:

using Word = Microsoft.Office.Interop.Word;
Word.XMLNodes docNodes = Doc.SelectNodes("//*");
System.Diagnostics.Debug.WriteLine("We have node count: " + docNodes.Count.ToString());
for (int i = 0; i < docNodes.Count; i++)
{
   Word.XMLNode node = docNodes[i];
   System.Diagnostics.Debug.WriteLine(node.get_XML());
}
尝试使用docNodes时失败,因为对Doc.SelectNodes的调用返回null。我在一个Word文档上运行了这个程序,它是通过在Word中单击“新建文档”,然后在几个段落中键入一些文本来创建的


我在这里或MSDN上找不到关于如何使此函数产生结果的好文档或示例。

这肯定会令人困惑,但

使用Microsoft.Office.Interop.Word时,您实际上是在使用自动化来访问Word的对象模型。但是对象模型并不真正了解.docx文件中的XML,下面描述了一些例外情况。如果您想检查磁盘上.docx中的实际XML,您确实需要使用Ofice Open XML SDK,或者可能需要使用打包接口

那么为什么文档对象中有SelectNodes成员呢?好的,它允许您选择自定义XML节点。但是这些在Word中不再得到支持——由于几年前的一场诉讼,微软从美国版本的Word 2007中删除了支持,然后在某个时候从所有更高版本的Word中删除了支持。事实上,您仍然可以通过一个称为XML结构窗格的东西在Word 2010中插入这样的节点。但是,如果保存文档并重新打开,这种类型的自定义XML将消失

尽管名称不同,但这种类型的东西与自定义XML部件中的XML不同。自定义XML部件是开发人员设计的数据区域,用于在.docx中存储所需的任何XML。例如,SharePoint使用自定义XML部件作为存储SharePoint列中定义的属性的机制—Word可以在内容控件中显示此属性数据。可以在自定义XML部件中检索和操作XML节点

最后,如果您需要检查或操作Word实际用于通过对象模型表示文档的XML,您可以使用范围、选择或文档对象的XML或WordOpenXML属性以有限的方式进行检查或操作。XML是Word 2003 XML格式的表示。WordOpenXML是WordOOXML平面OPC格式的表示。但请记住,您只能真正看到Word所需的XML来表示您提取的文档的特定部分—您永远无法以这种方式看到文档的完整XML,并且您不能真正假设Word将保存在磁盘上的XML是相同的