【问题标题】:Getting attribute values of a tag in XML via C#通过 C# 在 XML 中获取标签的属性值
【发布时间】:2016-07-20 15:23:00
【问题描述】:

我有一个 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 会给出“给定的索引超出范围”错误。

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: c# xml ssis


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      最简单的解决方案是 LINQ to XML。 XmlDocument 年纪大了很多,工作起来有点痛苦。

      如果你想成功获取总数,例如:

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

      【讨论】:

      • 这也很有效,我相信它将在未来的任务中帮助我很多。非常感谢我的朋友。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多