[英]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.