2017-07-31 99 views
0

我想根据属性值获取节点名称,但是如果有人能够帮助我,我不能在这方面做太多工作。在C#中基于XML中的属性值读取属性名称

我具有如下面的示例XML:基于所述状态,其中状态=“T”,我所需要的节点的名称作为输出

<ns0:Person xmlns:ns0="http://temp.poc"> 
    <name> 
     <value>temp</value> 
     <status>T</status> 
    </name> 
    <age> 
     <value>tempval</value> 
     <status>F</status> 
    </age> 
    <cellNumber> 
     <value>9971760613</value> 
     <status>T</status> 
    </cellNumber> 
    <city> 
     <value>Bangalore</value> 
     <status>F</status> 
    </city> 
    <ApplicationAccess> 
     <value>value_0</value> 
     <status>T</status> 
    </ApplicationAccess> 

</ns0:Person> 

。 为如:

assistant 
cellNumber 
ApplicationAccess 

回答

0

可以实现,使用XmlDocumentXPath,像这样:

string xml = @" 
    <ns0:Person xmlns:ns0='http://temp.poc'> 
     <name> 
      <value>temp</value> 
      <status>T</status> 
     </name> 
     <age> 
     <value>tempval</value> 
     <status>F</status> 
     </age> 
     <cellNumber> 
      <value>9971760613</value> 
      <status>T</status> 
     </cellNumber> 
    <city> 
     <value>Bangalore</value> 
     <status>F</status> 
    </city> 
    <ApplicationAccess> 
     <value>value_0</value> 
     <status>T</status> 
    </ApplicationAccess> 

    </ns0:Person>"; 

var doc = new XmlDocument(); 
doc.LoadXml(xml); 

XmlNodeList nodes = doc.SelectNodes("//status[text() ='T']"); 
foreach (XmlNode node in nodes) 
{ 
    Console.WriteLine(node.ParentNode.Name); 
} 

输出将这些节点,其子节点status具有T作为innerText属性的名称。

name 
cellNumber 
ApplicationAccess 
0

使用XDocument(我更喜欢XmlDocument):

var root = XDocument.Load(...).Root; // the <ns0:Person> XElement 
    var namesOfElementWithStatusT = root.Elements() 
     .Where(e => e.Elements().Any(e1 => e1.Name == "status" && e1.Value == "T")) 
     .Select(e => e.Name.LocalName) 
     .ToList();