c# - 如何在不向前移动的情况下从 XmlReader 读取?

标签 c# .net xml xml-parsing xmlreader

我得到了这个场景:

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/

相关文章:

xml - Xpath substring-before 只获取一个元素

java - 解析 xml 文件时出现未知主机异常

c# - 实现 .Net 接口(interface) (C#)

c# - 进程类 db2cmd c#

c# - 解析字符串时出现奇怪的错误?

c# - VSTestHost 正在崩溃并且不再工作

c# - 如何退出所有正在运行的线程?

iphone - 在 Iphone 中动态创建 XML 文件

c# - 返回作为参数传递的相同对象的方法

c# - 如何将点从一个网格映射到另一个网格?