В 380 509 T 20071215
Для вышеупомянутого XML-файла мне нужен xpath для получения childnodes ниже его:
Вывод, в котором я нуждаюсь:
<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");
Я не мог получить необходимый вывод. Это возвращает пустой указатель для вышеупомянутого кода. Может любой помогать на этом путем обеспечения корректного xpath retieve дочерние узлы. Еще есть ли любой другой способ получить его.
здесь проблема хорошо объяснена: Поиск в XDocument с использованием LINQ без знания пространства имен
Ваш 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);
Ваш XML-документ использует пространства имен XML, поэтому вам нужно указать их в выражении XPath. О том, как это сделать, см. следующее: