我需要通过提供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#代码实现这一点。任何人都可以帮我解决这个问题......
答案 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。