簡體   English   中英

從XML文檔中獲取特定數據

[英]Get specific data from XML document

我有這樣的xml文檔:

<level1>
 <level2>
  <level3>
   <attribute1>...</attribute1>
   <attribute2>false</attribute2>
   <attribute3>...</attribute3>
  </level3>
  <level3>
   <attribute1>...</attribute1>
   <attribute2>true</attribute2>
   <attribute3>...</attribute3>
  </level3>
</level2>
<level2>
 <level3>
   <attribute1>...</attribute1>
   <attribute2>false</attribute2>
...
...
...

我正在使用c#,我想通過所有“level3”,並且對於每個“level3”,我想讀取attribute2,如果它說“true”,我想打印相應的attribute3(可以是“level3” “沒有這些屬性)。

我將xml保存在XmlDocument中。 然后我保留所有“level3”節點,如下所示:

XmlNodeList xnList = document.SelectNodes(String.Format("/level1/level2/level3"));

(文檔是XmlDocument)。

但從現在開始,我不確切知道如何繼續。 我嘗試用for..each通過xnList,但對我來說沒有什么工作正常..

我該怎么做?

非常感謝

好吧,我使用LINQ to XML:

var results = from level3 in doc.Descendants("level3")
              where (bool) level3.Element("attribute2")
              select level3.Element("attribute3").Value;

foreach (string result in results)
{
    Console.WriteLine(result);
}

LINQ到XML做各種事情比簡單得多 XmlDocument API。 當然,缺點是它需要.NET 3.5 ......

(順便說一下,命名元素 attributeN有點令人困惑......人們會期望attribute引用實際的XML屬性......)

您可以使用LINQ to XML並閱讀是一個好的開始。

您可以使用XPath查詢。 這將為您提供一個XmlNodeList ,其中包含符合您要求的所有<attribute3>元素:

var list = document.SelectNodes("//level3[attribute2 = 'true']/attribute3");

foreach(XmlNode node in list)
{
    Console.WriteLine(node.InnerText);
}

您可以將上述xpath查詢分為三個部分:

  1. //level3 ”查詢名為<level3>所有后代元素。
  2. [attribute2 = 'true'] ”過濾(1)的結果,只保留子元素<attribute2>包含文本true元素。
  3. /attribute3 ”獲取(2)結果中每個元素的<attribute3>節點。

暫無
暫無

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

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