我有一个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中的所有三条消息,但我需要其“result”属性,我无法修复错误。另请注意,使用node.Attributes[1].InnerText
会给出“索引已超出范围”错误。
任何帮助将不胜感激。感谢。
答案 0 :(得分:1)
最简单的解决方案是LINQ to XML。 XmlDocument
比较长,并且有点痛苦。
如果您想获得成功的总数,例如:
var doc = XDocument.Load("filename.xml");
var success = doc.Descendants("message")
.Attributes("result")
.Count(result => result.Value == "success");
答案 1 :(得分:1)
我认为您正在寻找的功能可能是XmlNode.SelectNodes。
var successes = doc.SelectNodes("/start/action/message[@result='success']").Count; // = 2
var failures = doc.SelectNodes("/start/action/message[@result='failure']").Count; // = 1