【问题标题】:Check if an elements exist while parsing xml "Error No Sequence element"解析xml“错误无序列元素”时检查元素是否存在
【发布时间】:2017-11-08 19:48:47
【问题描述】:

我有一个带有不同设置标签的 xml,我想检查一个元素是否存在,因为我有错误 没有序列元素如果没有分配空值,我如何检查标签 szSerialNmbr 是否存在值或转义事务后代。 我经历了other post,但收到错误错误“扩展方法必须在非泛型静态类中定义”

XDocument xDocument = XDocument.Load(file);

foreach (var trans in xDocument.Descendants("Transaction"))
{
    var val1 = (string)trans.Descendants("Set").Elements("szSerialNmbr").First();

    var val2 = (string)trans.Descendants("Set").Elements("lMediaNmbr").First();

    var val3 = (string)trans.Descendants("Set").Elements("lMediaMember").First(); 
}

【问题讨论】:

  • 我已经尝试过了,但是没有用。我收到错误“扩展方法必须在非泛型静态类中定义”
  • @Lutch 然后将其放入非泛型静态类中,并导入该类;)(将其命名为 xmlExtensions 或其他名称)

标签: c# xml


【解决方案1】:

您可以通过添加 ? 来进行空检查,如果您不确定您的集合是否包含您在 linq 中查找的对象,您可以使用 firstOrDefault 允许 null 作为返回价值。

var val1 = (string)trans?.Descendants("Set")?.Elements("szSerialNmbr")?.FirstOrDefault()?.Value;

【讨论】:

  • 它是下划线,无法弄清楚:(
  • @Lutch 原来你不需要指定三元选择器(::null 位)。我更新了答案。
  • var val1 = (string)trans.Descendants("Set").Elements("szSerialNmbr").FirstOrDefault();这个可行,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多