Как получить путь XML по его значению? - PullRequest
0 голосов
/ 23 марта 2010

Мне нужно получить путь xml для файла xml, указав в качестве входных данных значение дочернего элемента xml.

Например:

XML-файл:

<?xml version="1.0"?>
  <document-inquiry xmlns="http://ops.epo.org">
    <publication-reference data-format="docdb" xmlns="http://www.epo.org/exchange">
      <document-id>
        <country>EP</country>
        <doc-number>1000</doc-number>
        <kind>A1</kind>
      </document-id>
    </publication-reference>    
  </document-inquiry>

Для приведенного выше XML-файла. Мне нужно получить путь XML, используя значение «1000». Если мой вход является значением элемента "1000" Вывод мне нужен:

 <document-id>
        <country>EP</country>
        <doc-number>1000</doc-number>
        <kind>A1</kind>
  </document-id>

Мне нужно добиться этого с помощью кода на C #. Может кто-нибудь помочь мне в этом ...

Ответы [ 2 ]

0 голосов
/ 23 марта 2010

Вы можете использовать XPathSelectElement метод расширения:

using System;
using System.Xml;
using System.Xml.Linq;
using System.Xml.XPath;

class Program
{
    static void Main()
    {
        var doc = XDocument.Load("test.xml");
        var ns = new XmlNamespaceManager(new NameTable());
        ns.AddNamespace("ns", "http://www.epo.org/exchange");
        var elem = XDocument.Load("test.xml")
            .XPathSelectElement("//ns:document-id[ns:doc-number='1000']", ns);
        if (elem != null)
        {
            Console.WriteLine(elem.ToString());
        }
    }
}

Вы можете использовать XPathSelectElements , если хотите выбрать несколько узлов, соответствующих этому критерию.

0 голосов
/ 23 марта 2010

Вы можете выбрать нужный элемент с помощью запроса linq.

var number = "1000";
var xml = XDocument.Parse( xml_string );
XNamespace ns = "http://www.epo.org/exchange";

var result = (from data in xml.Descendants(ns + "document-id")
           where data.Element(ns + "doc-number").Value == number
           select data).FirstOrDefault();

.FirstOrDefault() возвращает первый соответствующий элемент или ноль. Вместо этого вы можете использовать .List(), чтобы получить список, содержащий все соответствующие элементы.

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