2017-07-31 103 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();