XmlNode的Selectnodes找不到Relationship节点

时间:2016-09-26 14:24:09

标签: c# xml

喂,

我正在尝试使用XmlNode的SelectNodes方法来获取下面的ID信息。我需要ID将它绑定到它的图像参考。我在成功之前使用了带有命名空间的selectnodes,但我认为它与关系的命名空间有关,因为它在这个节点中定义了命名空间。

<pkg:package xmlns:pkg="http:blah">
  <pkg:part pkg:name="/_rels/.rels" pkg:contentType="blah" pkg:padding="512">...</pkg:part>
  <pkg:part pkg:name="blah" pkg:contentType="blah" pkg:padding="256">
    <pkg:xmlData>
      <Relationships xmlns="http:blah">
        <Relationship Id="rId8" Type="http:blah" Target="media/image2.png/>
        <Relationship Id="rId3" Type="http:blah" Target="media/image3.png/>

我尝试过的东西没有返回任何结果:

...SelectNodes("//pkg:package/pkg:part/pkg:xmlData/Relationships/Relationship[@Type='blah'", nsm);  
...SelectNodes("//Relationships", nsm);  
...SelectNodes("//xmlns:Relationships", nsm); 
...SelectNodes("//Relationship", nsm);  
...SelectNodes("//Relationship[@Type='http:blah'], nsm);   

依旧等等。我希望这会有所帮助,但它没有用。

这是我的nsm设置......

nsm = new XmlNamespaceManager(xmldocin.NameTable);
            nsm.AddNamespace ("w", "http://schemas.openxmlformats.org/wordprocessingml/2006/main");
            nsm.AddNamespace("pkg", "http://schemas.microsoft.com/office/2006/xmlPackage");
            nsm.AddNamespace("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
            nsm.AddNamespace("a", "http://schemas.openxmlformats.org/drawingml/2006/main");
            nsm.AddNamespace("pic", "http://schemas.openxmlformats.org/drawingml/2006/picture");
            nsm.AddNamespace("wp", "http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing");

如果我在select查询中使用pkg:xmlData工作正常,那么我知道我的其余代码工作正常。问题特别是“关系”节点。

我需要的实际信息是ID,所以我可以将它与目标相关联,这样我知道当我通过文档点击该ID时要使用哪个图像。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

使用某个键(例如ns)将默认命名空间添加到命名空间管理器:

nsm.AddNamespace("ns", ...)

然后您可以使用该键定位此默认命名空间的节点:

.. SelectNodes("//ns:Relationship", nsm);