什么是 XML null 属性,以及如何在 Linq-To-XML 中处理它们?
我正在尝试将 XmlReader
读取到 XDocument
中,但
//GetContentStructureReader() retrieves the reader from an external source
XmlReader reader = GetContentStructureReader();
XDocument.Load(reader);
对于一个特定数据源,我不断收到以下异常:
System.ArgumentNullException 未被用户代码处理 消息=值不能为空。 参数名称:值 源=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 正在用 null 值初始化。
XML 中的 null 属性是什么?我尝试检查(6 MB)源文档来更正数据,但徒劳无功,因为我不知道我正在寻找哪种 XML 构造。
有解决方法吗?
I'm trying to read a XmlReader
into a XDocument
//GetContentStructureReader() retrieves the reader from an external source
XmlReader reader = GetContentStructureReader();
XDocument.Load(reader);
I keep getting the following exception with one specific data source:
System.ArgumentNullException was unhandled by user code
Message=Value cannot be null.
Parameter name: value
Source=System.Xml.Linq
ParamName=value
StackTrace:
at System.Xml.Linq.XAttribute..ctor(XName name, Object value)
at System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r)
at System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r, LoadOptions o)
at System.Xml.Linq.XDocument.Load(XmlReader reader, LoadOptions options)
at System.Xml.Linq.XDocument.Load(XmlReader reader)
So it seems that during the loading, at some point a XAttribute is being initialized with null value.
What is a null attribute in XML? I've tried examining the (6 megabyte) source document to correct the data, but in vain, since I don't know what kind of XML construct I'm looking for.
Is there a workaround for this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在加载文档期间,空值不应作为 XAttribute 的值出现。所以你所看到的是出乎意料的。您可以在调试器中的异常处停止以查看调用堆栈和参数值(特别是 XName 名称),这可能会帮助您在源文档中查找属性。 (您也可以在确实定义了阅读器的框架之一的窗口窗口中尝试 ((IXmlLineInfo)reader) 。
无论如何,.NET Framework 中 XmlReader 的默认实现绝不会导致这种情况。所以问题是,您在哪里/如何创建传递给 Load 方法的 XmlReader 对象的实例?
During loading of a document null value should not appear as values for XAttribute. So what you're seeing is unexpected. You could stop on the exception in the debugger to see the callstack and the values of the parameters (the XName name in particular) which might help you locating the attribute in the source document. (You could also try ((IXmlLineInfo)reader) in your whatch window on one of the frames which do have the reader defined.
In any case the default implementation of XmlReader in the .NET Framework should never cause this. So the question is, where/how did you create the instance of the XmlReader object you pass to the Load method?