2011-08-09 45 views
0

我有下面的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> 

我要选择具有元素ID =文本elment节点的所有子元素:SOME_ID,我怎样才能使用XmlDocument的它方法

+0

你*有*使用XmlDocument的,而不是LINQ到XML? –

+0

使用XPath表达式。检查http://www.w3schools.com/xpath –

回答

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); 
}