如何通过其值获取XML路径?

时间:2010-03-23 13:33:07

标签: c# xml

我需要通过提供xml子元素的值作为输入来获取xml路径opf 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文件。我需要使用值“1000”来获取XML路径。 如果我的输入是元素“1000”的值 我需要的输出是:

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

我需要使用c#代码实现这一点。任何人都可以帮我解决这个问题......

2 个答案:

答案 0 :(得分:0)

您可以使用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()返回第一个匹配元素或null。您可以使用.List()来获取包含所有匹配元素的列表。

答案 1 :(得分:0)

您可以使用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