XmlReader和不完整的xml内容和EOF

时间:2010-12-18 08:58:40

标签: c# intellisense xmlreader

我想使用XmlSchemaValidator在xml编辑器中实现intellisense。 用户输入“<”我想根据XSD文件建议允许的元素。 为此,我需要验证类型化的XML内容,这当然是不完整的。 样品:

<element1 atb="1">
    <element2>
        < ==> suggest element3

因此验证器需要验证element1,atb和element2。然后我可以使用validator.GetExpectedParticles。 由于我不想为自己解析内容,我想使用XmlReader。但是XmlReader无法告诉我他何时在EOF(只是向他提供了xml-string而没有样本中的最后一个“&lt;”)。

string s = "<element1 atb='1'><element2>";
StringReader sr = new StringReader(s);
XmlReader xr = XmlReader.Create(sr);
while (!xr.EOF)
{
    xr.Read();
    // ... validate element, attributes ... //
} 

我的问题是,xr.EOF()永远不会返回true,所以我不知道何时停止阅读和验证。 任何想法?

谢谢

2 个答案:

答案 0 :(得分:3)

编辑经常必须处理格式错误,不完整,错位和其他错误的输入。 XmlReader 设计可以(仅)使用有效的xml。

简而言之,这样做不会那么顺利。我完全希望你不得不找到编写一个容错的解析器。

答案 1 :(得分:1)

XmlReader.Read方法将抛出XmlException。 此异常提供错误的行和位置。 所以你可以自己分析文件的其余部分。 XmlReader无法读取无效的XML,因为它不知道会发生什么。您可以删除无效行并尝试再次解析文件以突出显示文件的其余部分。