Как получить текст из XML с позиции в XML-файле?
Я хочу разобрать HTML (можно предположить, что это XML, преобразованный через Tidy) и получить все текстовые узлы (что означает узлы в теге Body, которые видны) и их расположение в XML-файле. Расположение означает положение текста в плоском XML-файле.
3 ответа:
XmlTextReader
implementsIXmlLineInfo
- Если вы посмотрите на документы дляIXmlLineInfo
в нем приведен пример чтения XML-файла и отчета о местоположении каждого узла.EDIT: для тех, кто говорит, что это неуместно, это вполне может быть неуместно для XML - но, вполне возможно, не для человека. Если вы пытаетесь сказать людям, где искать в XML определенные биты, может быть очень полезно сообщить номера строк и позиции.
Спецификация SAX для чтения XML (которую реализуют почти все инструменты XML) предоставляет ContentHandler с локатором, который позволяет получить номер строки и символа (столбца).
int getColumnNumber() Return the column number where the current document event ends. int getLineNumber() Return the line number where the current document event ends.
(я пропустил требование для C#. Пример выше для Java, но я постараюсь найти соответствующий интерфейс C#).
Событие может быть строкой символов.
SAX для .NET описывается в: http://saxdotnet.sourceforge.net/
Не следует полагаться на положение текста в XML-файле (пробелы полностью игнорируются любым здравомыслящим синтаксическим анализатором). Что вы можете (и должны) делать, так это использоватьXPath для идентификации узлов, которые вас интересуют, а затем извлекать текст из этих узлов. Если вас интересуют только текстовые узлы, то запрос "//text()" захватит все текстовые узлы.