Динамическое чтение необработанных элементов XML как текста в Java - PullRequest
3 голосов
/ 04 декабря 2011

Предполагается, что XML-файл с неизвестной структурой (т. Е. Неизвестными именами элементов и атрибутов), например

<RootElement>
   <Level 1 ...>
        <Level 2 ...>
            ...
        </Level 2>
        <Level 2 ...>
            ...
        </Level 2>
    </Level 1>
    <Level 1 ...>
        <Level 2 ...>
            ...
        </Level 2>
        <Level 2 ...>
            ...
        </Level 2>
    </Level 1>
</RootElement>

Можно ли использовать StAX для получения полного необработанного текста каждогоelement?

По крайней мере, как это можно сделать для первого уровня, то есть в приведенном выше примере (игнорируя симпатичную печать), как мы можем прочитать следующие 2 строки в переменной Java String:

"<Level 1 ...><Level 2...>...</Level 2></Level 1>"

и

"<Level 1 ...><Level 2...>...</Level 2></Level 1>"

Ответы [ 2 ]

2 голосов
/ 04 декабря 2011

Используйте XMLStreamReader и XMLStreamWriter вместе, чтобы получить (произвести) любой необработанный XML, который вы хотите.Может показаться, что вы можете сделать некоторые трюки для более простого решения, но вы не можете - XML ​​нужно проанализировать, иначе вы в глубокой воде, и если вы хотите взломать парсер, они обычно реализуютсяс внутренней буферизацией, которая немного утомительна для корректной обработки входящего потока.

Редактировать: Использовать шаблон разбора в в этом вопросе , чтобы отслеживатьуровень.Чтобы написать, обрабатывайте каждый тип события из входных данных по-своему - обратите внимание, что вы можете выполнять итерацию по всем атрибутам, а также по пространствам имен для событий начального элемента.

0 голосов
/ 04 декабря 2011

Нет, XMLStreamReader позволяет получить текстовое содержимое только для текста xml с getElementText () , чтобы получить полное содержимое, вам придется самостоятельно прочитать файл, взять элементы и восстановить XML.

Но, возможно, вы хотите сделать что-то еще. Почему бы вам не объяснить, зачем вам это нужно?

...