Абсолютный Xpath, чтобы получить список дочерних узлов? - PullRequest
1 голос
/ 05 мая 2010

В 380509 T 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");

Я не смог получить нужный вывод. Для приведенного выше кода возвращается ноль. Может кто-нибудь, пожалуйста, помогите в этом, предоставив правильный xpath для ретивирования дочерних узлов. Еще есть какой-нибудь другой способ получить его.

Ответы [ 3 ]

1 голос
/ 05 мая 2010

Ваш XML-документ использует пространства имен XML, поэтому вам необходимо указать их в выражении XPath. Ниже описано, как это сделать:

1 голос
/ 05 мая 2010

проблема хорошо объяснена здесь: Поиск 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);
0 голосов
/ 05 мая 2010

Укажите полный путь для извлечения xpath.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...