【发布时间】:2011-08-03 11:50:06
【问题描述】:
使用 XmlDocument 解析 XML 文件并在以后仍保留行信息以用于错误消息时,我有哪些选择? (顺便说一句,是否可以使用 XML 反序列化做同样的事情?)
选项似乎包括:
【问题讨论】:
标签: c# xml xmldocument
使用 XmlDocument 解析 XML 文件并在以后仍保留行信息以用于错误消息时,我有哪些选择? (顺便说一句,是否可以使用 XML 反序列化做同样的事情?)
选项似乎包括:
【问题讨论】:
标签: c# xml xmldocument
我知道的唯一其他选项是XDocument.Load(),它的重载接受LoadOptions.SetLineInfo。这与XmlDocument 的使用方式大致相同。
【讨论】:
XPathDocument 方法。
(来自@Andy 评论的扩展答案)
没有使用XmlDocument 的内置方法(如果您使用的是XDocument,则可以使用接受LoadOptions.SetLineInfo 的XDocument.Load() 重载 - 请参阅this question)。
虽然没有内置方式,但您可以使用此处的 PositionXmlDocument 包装类(来自 SharpDevelop 项目):
为了使用它,您需要使用接受XmlReader 的Load 重载(其他Load 重载将转到常规XmlDocument 类,它不会为您提供行号信息)。如果您当前正在使用接受文件名的XmlDocument.Load 重载,则需要按如下方式更改代码:
using (var reader = new XmlTextReader(filename))
{
var doc = new PositionXmlDocument();
doc.Load(reader);
}
现在,您应该可以将此文档中的任何 XmlNode 转换为 PositionXmlElement 以检索行号和列:
var node = doc.ChildNodes[1];
var elem = (PositionXmlElement) node;
Console.WriteLine("Line: {0}, Position: {1}", elem.LineNumber, elem.LinePosition);
【讨论】:
using ICSharpCode.WpfDesign.XamlDom; - 这对 C# 用户来说可能非常明显,但我是 C# 的新手 :o ... +1!