按节点文本选择节点

时间:2011-08-09 10:29:04

标签: .net

我必须关注XML文件:

<root xmlns="http://someurl/element" xmlns:text="http://someurl/text">
   <elements>
     <element>
       <Id>text:SOME_ID</Id>
        <!-- some other elements -->
     </element>
      <element>
       <!-- some other elements -->
        <reference>
          <link ref="text:SOME_ID" />
        </reference>
     </element>
   </elements>
 </root>

我想选择elment节点中具有元素Id = text:SOME_ID的所有子元素,如何使用xmldocument方法获取它

1 个答案:

答案 0 :(得分:0)

根据您的问题,我并不完全清楚您要选择的内容,但我认为您要选择<element>生成内容为<Id>的子text:SOME_ID

如果您坚持使用XmlDocument,可以像这样使用它:

IEnumerable<XPathNavigator> GetElements(String xml, String id) {
  var xmlDocument = new XmlDocument();
  xmlDocument.LoadXml(xml);
  var namespaceManager = new XmlNamespaceManager(xmlDocument.NameTable);
  namespaceManager.AddNamespace("ns", "http://someurl/element");
  var navigator = xmlDocument.CreateNavigator();
  var xPath = "//ns:element/ns:Id[. = '" + id + "']/..";
  return navigator.Select(xPath, namespaceManager).Cast<XPathNavigator>();
}

但是,我建议使用LINQ to XML:

IEnumerable<XElement> GetElements(String xml, String id) {
  XNamespace ns = "http://someurl/element";
  var xDocument = XDocument.Parse(xml);
  return xDocument
    .Descendants(ns + "element")
    .Where(element => (String) element.Element(ns + "Id") == id);
}