绝对Xpath获取子节点列表?

时间:2010-05-05 07:33:12

标签: xml xpath

                                                                                   在                 380509                 Ť                 20071215                            
                                                                                                                     

对于上面的xml文件,我需要xpath来接收它下面的子节点:

我需要的输出是:

<exchange-documents xmlns="http://www.epo.org/exchange">
    <exchange-document country="AT" doc-number="380509" family-id="38826527" kind="T" system="ops.epo.org">
      <bibliographic-data>
        <publication-reference data-format="docdb">
          <document-id>
            <country>AT</country>
            <doc-number>380509</doc-number>
            <kind>T</kind>
            <date>20071215</date>
          </document-id>
        </publication-reference>  
        <parties>
          <applicants>
          </applicants>
          <inventors>
          </inventors>
        </parties>
      </bibliographic-data>
    </exchange-document>

我使用Linq-Xml获取以下数据:

这是我的Xpath和代码:

var list = doc1.XPathSelectElement("exchange-document");

我无法检索所需的输出。它为上面的代码返回null。任何人都可以通过提供正确的xpath来解压缩子节点来帮助解决这个问题。否则还有其他方法可以检索它。

3 个答案:

答案 0 :(得分:1)

您的XML文档使用XML命名空间,因此您需要在XPath表达式中指定它们。有关如何执行此操作,请参阅以下内容:

答案 1 :(得分:1)

问题在这里得到了很好的解释:Search XDocument using LINQ without knowing the namespace

您的xml有名称空间。搜索元素时,Name属性是包含命名空间的XNamae。所以你必须寻找Name.LocalName == [theNameOfYourNode]

var xml = XElement.Parse(@"<worldpatentdata xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema"">
          <meta name=""elapsed-time"" value=""329"" xmlns=""http://ops.epo.org/\""/>
          <exchange-documents xmlns=""http://www.epo.org/exchange\"">
            <exchange-document country=""AT"" doc-number=""380509"" family-id=""38826527"" kind=""T"" system=""ops.epo.org"">
              <bibliographic-data>
                <publication-reference data-format=""docdb"">
                  <document-id>
                    <country>AT</country>
                    <doc-number>380509</doc-number>
                    <kind>T</kind>
                    <date>20071215</date>
                  </document-id>
                </publication-reference>  
                <parties>
                  <applicants>
                  </applicants>
                  <inventors>
                  </inventors>
                </parties>
              </bibliographic-data>
            </exchange-document>
          </exchange-documents>
        </worldpatentdata>");

        var a = xml.Descendants().First(x => x.Name.LocalName == "exchange-documents");
        Console.WriteLine(a);

答案 2 :(得分:0)

放置xpath的完整路径以进行检索。