在
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来解压缩子节点来帮助解决这个问题。否则还有其他方法可以检索它。
答案 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的完整路径以进行检索。