簡體   English   中英

從C#中的xml中基於屬性值讀取屬性名稱

[英]Reading a Attribute name based on attribute value from xml in C#

我試圖根據屬性值獲取節點名稱,但是如果有人可以幫助我,我將無法繼續進行下去。

我有以下示例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>

基於Status,其中status =“ T”,我需要節點名稱作為輸出。 例如:

assistant
cellNumber
ApplicationAccess

您可以使用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);
}

輸出將是其子節點statusT作為innerText的那些節點的名稱。

name
cellNumber
ApplicationAccess

使用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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM