3

我正在尝试创建一个简单的应用程序,它使用 SAX (XmlTextReader) 从流中读取 XML,该流不仅包含 XML,还包含其他数据,例如二进制 blob 和文本。流的结构只是基于块的。

进入我的阅读功能时,流正确定位在 XML 的开头。我已将问题简化为以下代码示例:

string xml = "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?><Models />" + (char)0x014;

XmlTextReader reader = new XmlTextReader(new StringReader(xml));
reader.MoveToContent();
reader.ReadStartElement("Models");

由于字符串末尾的 0x014,这几行在调用 ReadStartElement 时会导致异常。

有趣的是,当使用以下输入时,代码运行得很好:

string xml = "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?><Models></Models>" + (char)0x014;

由于它的大小,我不想阅读整个文档,也不想更改输入,因为我需要保持向后兼容旧数据输入。

起初我能想到的唯一解决方案是自定义流阅读器,它不会在最后一个结束标签之后继续阅读,但这将涉及一些主要的解析工作。

您对如何解决此问题有任何想法吗?我已经尝试过使用 LINQ 的 XDocument,但也失败了。

非常感谢您,干杯,

罗莫特

4

1 回答 1

0

我不知道这是否正是您要寻找的,但是如果您改为致电:

reader.IsStartElement("Models");,

仅当<Models/>节点是开始标记或空元素标记并且名称匹配时,才会测试该节点。阅读器不会被移动到它之外(不会调用 Read() 方法)。

于 2011-01-28T15:40:49.517 回答