Как получить доступ к «строке» и «столбцу» узлов при разборе XML - PullRequest
1 голос
/ 03 марта 2009

В C # есть ли способ определить позицию XmlNode в исходном XML-тексте, когда документ загружается из файла или строки? Я хочу иметь возможность сообщать о проблемах с документом XML, который я обрабатываю.

например:

"Ошибка в foo.xml - значение атрибута 'pet' должно быть видом пушистого млекопитающего, в строке 27, столбец 13 [фрагмент оригинального текста XML здесь ...]"

Edit: Проверки не могут быть выполнены с использованием проверки схемы. Вот еще одно, менее легкомысленное примерное сообщение об ошибке, чтобы проиллюстрировать: «указанный тип надстройки 'Addins.LogWindow' должен быть общедоступным"

Ответы [ 3 ]

2 голосов
/ 03 марта 2009

Ну, вы не должны писать свой собственный XmlParser, но в Compact Framework у нас нет выбора, поскольку XmlDocument такой же медленный, как Далай-лама на кетамине, поэтому мы используем XmlReader при разборе файла Xml.

Мы генерируем исключение всякий раз, когда находим что-то испорченное или непоследовательное, и передаем исключение XmlReader. Затем мы можем извлечь положение строки, приведя XmlReader к объекту IXmlLineInfo, который содержит свойства для линии и положения.

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

1 голос
/ 03 марта 2009

Извините, существует очень мало реализаций DOM, которые запомнят исходное проанализированное местоположение узла для вас. Большинство сообщают только любую информацию о позиции при ошибке разбора. Например, в DOM Level 3 LS вы получаете ссылку на DOMLocator только при наличии DOMError .

Единственный известный мне имп, который отслеживает после парсинга, это pxdom, и это для Python, поэтому он не очень полезен для вас.

1 голос
/ 03 марта 2009

Подойдет ли вам XML-схема?

http://support.microsoft.com/kb/318504

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...