XmlReader и неполный XML-контент и EOF - PullRequest
2 голосов
/ 18 декабря 2010

Я хочу реализовать intellisense в редакторе xml, используя XmlSchemaValidator. Пользователь вводит «<», и я хочу предложить разрешенные элементы на основе файла XSD. Для этого мне нужно проверить типизированный XML-контент, который, конечно, не завершен. Пример: </p>

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

Таким образом, валидатору нужно проверить element1, atb и element2. Тогда я могу использовать validator.GetExpectedParticles. Так как я не хочу анализировать контент для себя, я хочу использовать XmlReader. Но XmlReader не может сказать мне, когда он в EOF (просто предоставив ему строку xml без последнего «<» в образце). </p>

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 ]

3 голосов
/ 18 декабря 2010

Редакторы обычно приходится иметь дело с некорректным, неполным, искаженным и иным образом вводимым вводомXmlReader предназначен для работы (только) с действительным XML.

Короче говоря, это не будет работать так хорошо.Я полностью ожидаю, что вам придется либо найти , либо записать отказоустойчивый анализатор.

1 голос
/ 04 января 2011

Метод XmlReader.Read вызовет исключение XmlException. Это исключение содержит строку и позицию ошибки. Таким образом, вы можете проанализировать остальную часть файла самостоятельно. XmlReader не может прочитать неверный XML, так как он не знает, чего ожидать. Вы можете удалить неверную строку и попробовать снова проанализировать файл, чтобы выделить оставшуюся часть файла.

...