我想使用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,所以我不知道何时停止阅读和验证。 任何想法?
谢谢
答案 0 :(得分:3)
编辑经常必须处理格式错误,不完整,错位和其他错误的输入。 XmlReader
设计可以(仅)使用有效的xml。
简而言之,这样做不会那么顺利。我完全希望你不得不找到或编写一个容错的解析器。
答案 1 :(得分:1)
XmlReader.Read方法将抛出XmlException。 此异常提供错误的行和位置。 所以你可以自己分析文件的其余部分。 XmlReader无法读取无效的XML,因为它不知道会发生什么。您可以删除无效行并尝试再次解析文件以突出显示文件的其余部分。