Java-контекстный синтаксический анализ - PullRequest
3 голосов
/ 23 марта 2011

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

Проблема заключается в получении first-level only узлов, а не извлечения только текстовых узлов .

Есть ли неориентированный на DOM подход для этого? (Обратите внимание, что имена узлов заранее не известны)

[РЕДАКТИРОВАТЬ]

Пример ввода

<root>
   <a>text1</a>
   <b>text2</b>
   <c>text3</c>
   <nested>
       <d>not_text4</d>
       ...
   <nested>
   ...
</root>

Пример вывода

Map<String, String> map := {
    {a, text1}
    {b, text2}
    {c, text3}
}

В настоящее время решается как обходной путь, ориентированный на DOM. Хотя существуют библиотеки, которые предлагают подмножество выражений xpath для SAX / STAX.

Ответы [ 2 ]

2 голосов
/ 23 марта 2011

SAX и StAX на самом деле не учитывают пути, так как они ориентированы на события. Хотя, безусловно, возможно реализовать обработчик, который отслеживает уровень разбора, вам, вероятно, лучше использовать XPath .

Несколько более сложной тактикой может быть написание XSLT-преобразования, в котором сохраняются только те элементы, которые вам нужны, а затем обработка результата с использованием SAX или Stax.

1 голос
/ 23 марта 2011

Это будет немного накладно, но вы получите мощный инструмент для работы с XML.Попробуйте JAXB .

...