【问题标题】:What is a XML null attribute, and how to handle them in Linq-To-XML?什么是 XML 空属性,以及如何在 Linq-To-XML 中处理它们?
【发布时间】:2010-08-26 10:16:07
【问题描述】:

我正在尝试将XmlReader 读入XDocument

//GetContentStructureReader() retrieves the reader from an external source
XmlReader reader = GetContentStructureReader();
XDocument.Load(reader);

对于一个特定的数据源,我不断收到以下异常:

System.ArgumentNullException 未被用户代码处理 Message=Value 不能为空。 参数名称:值 源=System.Xml.Linq 参数名称=值 堆栈跟踪: 在 System.Xml.Linq.XAttribute..ctor(XName 名称,对象值) 在 System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r) 在 System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r,LoadOptions o) 在 System.Xml.Linq.XDocument.Load(XmlReader 阅读器,LoadOptions 选项) 在 System.Xml.Linq.XDocument.Load(XmlReader 阅读器)

所以似乎在加载过程中,某个时候 XAttribute 被初始化为空值。

什么是 XML 中的空属性?我尝试检查(6 兆字节)源文档以更正数据,但没有成功,因为我不知道我在寻找哪种 XML 结构。

有解决办法吗?

【问题讨论】:

    标签: c# xml linq-to-xml


    【解决方案1】:

    在加载文档期间,空值不应显示为 XAttribute 的值。所以你看到的是出乎意料的。您可以在调试器中停止异常以查看调用堆栈和参数值(特别是 XName 名称),这可能有助于您在源文档中定位属性。 (您也可以在您的 whatch 窗口中尝试 ((IXmlLineInfo)reader) 在确实定义了阅读器的框架之一上。 在任何情况下,.NET Framework 中 XmlReader 的默认实现都不会导致这种情况。所以问题是,您在哪里/如何创建传递给 Load 方法的 XmlReader 对象的实例?

    【讨论】:

    • 从这个问题出发并以另一种方式对其进行攻击。我无法将调试器附加到代码行,因为 XmlReader 是在第三方库中创建的。接受这一点是因为关于调试的建议是可靠的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    相关资源
    最近更新 更多