Как обнаружить XML-массивы в Java с помощью Stax? - PullRequest
1 голос
/ 02 мая 2019

Я пытаюсь проанализировать файл XML с помощью STAX.Я использую события:

-XMLStreamConstants.START_ELEMENT
-XMLStreamConstants.CHARACTERS
-XMLStreamConstants.END_ELEMENT

Есть ли какое-либо событие или "хитрый способ" обнаружить существование массива в XML?Основная проблема в том, что я не знаю формат анализируемого XML, это может быть любой XML любого формата.

Обратите внимание, что я не хочу использовать другие библиотеки, потому что файл XML огромен, и я не хочу загружать весь файл в память.

В json reader у нас естьevents:

-BEGIN_ARRAY
-END_ARRAY

Поэтому я ищу способ, с помощью которого можно обнаружить начало массива в XML с помощью STAX.

Спасибо

1 Ответ

0 голосов
/ 02 мая 2019

A Stack<String> вложенных элементов, таких как книга, глава, абзац, предложение.В начале и конце элемента push/pop в / из стека запомните предыдущий элемент и поместите повторяющиеся элементы в «массив», a List<Object>, json [...], где Object может быть Map<String, Object>, json { field: ..., ... }.

<book>
    <author />
    <chapter>
         <paragraph>
             <sentence>
             <sentence>


Map
    "book" : Map
          "author" : String
          "chapter" : List
               Map
                   "paragraph" : List
                       Map
                           "sentence" : List
                               String
                               String

Stack<String> tagNesting = new Stack<>();
String priorTag = "";
Map<String, Object> parentValue;

Обычно каждый элемент представляет собой карту ( LinkedHashMap сохраняет порядок) с записями в виде атрибутов XML и дочерних элементов XML.Поместите атрибуты с ключом "@" + name, а элементы - просто с ключом name.

Если элемент повторяется, проверьте предыдущую запись (Карта или уже Список) и объявление к ней, так что естьодин список.

...