簡體   English   中英

通過C#獲取XML中的標簽的屬性值

[英]Getting attribute values of a tag in XML via C#

我有一個像這樣的xml文檔:

<start>
<action>
<message id="1" result="success">This is my message 1</message>
</action>
<action>
<message id="2" result="failure">This is my message 2</message>
</action>
<action>
<message id="2" result="success">This is my message 3</message>
</action>
</start>

我需要計算SSIS的xml文件中有多少成功消息和多少失敗消息。 現在不允許將XML文件導入SSIS,因此我在控制流中添加了一個腳本任務,並添加了以下代碼以讀取xml:

XmlDocument doc = new XmlDocument();
doc.Load(Dts.Variables["filename"].Value.ToString());
XmlNode node= doc.SelectSingleNode("/start/action/hl7");
MessageBox.Show(node.Attributes["result"].InnerText);

這返回的是第一條消息的結果,“僅成功;但是我也想查看其他2個結果(失敗,成功)。這一定是因為SelectSingleNode方法,但是我找不到像SelectMultipleNodes這樣的東西”任何其他選擇嗎?我嘗試下面的代碼,但它給出了: Object reference not set to an instance of an object

foreach (XmlNode node in doc.DocumentElement.ChildNodes)
{
     //MessageBox.Show(node.InnerText);
     MessageBox.Show(node.Attributes["result"].InnerText);
}

但是,請注意, MessageBox.Show(node.InnerText); 在xml中顯示了所有三個消息,但是我需要它的“結果”屬性,並且無法在那里修復錯誤。 另請注意,使用node.Attributes[1].InnerText會出現“給定索引超出范圍”錯誤。

任何幫助,將不勝感激。 謝謝。

最簡單的解決方案是LINQ to XML。 XmlDocument很老,使用起來有點痛苦。

如果您想獲得成功的總數,例如:

var doc = XDocument.Load("filename.xml");

var success = doc.Descendants("message")
    .Attributes("result")
    .Count(result => result.Value == "success");

我認為您正在尋找的功能可能是XmlNode.SelectNodes

var successes = doc.SelectNodes("/start/action/message[@result='success']").Count; // = 2
var failures = doc.SelectNodes("/start/action/message[@result='failure']").Count;  // = 1

暫無
暫無

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

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