我得到了这个场景:
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element && reader.Name == itemElementName)
{
XElement item = null;
try
{
item = XElement.ReadFrom(reader) as XElement;
}
catch (XmlException ex)
{
//log line number and stuff from XmlException class
}
}
}
在上面的循环中,我将某个节点 (itemElementName) 转换为 XElement。
一些节点将是良好的 XML 并将进入 XElement,但是,有些则不会。
在 CATCH 中,我不仅想捕获标准的 XmlException 内容...我还想捕获当前 Xml 的摘录和字符串。
但是,如果我在将节点传递给 XElement 之前对其执行任何类型的 READ 操作,它会使读取器向前移动。
如何在不干扰读取器位置的情况下获取读取器 OuterXml 内容的“快照”?
最佳答案
实际上 ReadSubtree 将返回一个“包装”原始阅读器的阅读器。因此,通读新书最终也会推进原书。 您必须将 XmlReader 视为仅向前阅读器,它根本无法返回。 至于您的场景,您可以向读者询问输入文件中的位置,而不是试图记住部分 XML。只需将其转换为 IXmlLineInfo 接口(interface)即可,它具有返回行和位置的方法。使用这个你可以记住一些起始位置(在有问题的元素之前),然后是错误的结束位置。然后从输入文件中以纯文本形式读取该部分。
关于c# - 如何在不向前移动的情况下从 XmlReader 读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2947760/