У меня есть xml данной формы.Разберите огромный XML-файл, чтобы получить отличные значения от дочерних тегов - нужны лучшие предложения по выбору
<myData>
<myElement>
<myGroupID>ID1</myGroupID>
<myGroupValue>value1</myGroupValue>
</myElement>
<myElement>
<myGroupID>ID2</myGroupID>
<myGroupValue>value2</myGroupValue>
</myElement>
<myElement>
<myGroupID>ID3</myGroupID>
<myGroupValue>value3</myGroupValue>
</myElement>
<myElement>
<myGroupID>ID4</myGroupID>
<myGroupValue>value4</myGroupValue>
</myElement>
<myElement>
<myGroupID>ID1</myGroupID>
<myGroupValue>value1</myGroupValue>
</myElement>
<myElement>
<myGroupID>ID2</myGroupID>
<myGroupValue>value2</myGroupValue>
</myElement>
<myElement>
<myGroupID>ID3</myGroupID>
<myGroupValue>value3</myGroupValue>
</myElement>
<myElement>
<myGroupID>ID4</myGroupID>
<myGroupValue>value4</myGroupValue>
</myElement>
<myData>
Общее количество myElement
тегов в файле может быть 2-4million, и есть другие теги в каждом из элементов. Как видно, метки myGroupID
и myGroupValue
имеют повторяющиеся значения для разных элементов.
Мое требование состоит в том, чтобы получить отличные значения myGroupID
и myGroupValue
тегов.
Я пытался использовать Stax parser with Iterator api [event based approach]
. То, что я узнал, мне придется пройти через все теги, чтобы проверить, event.getLocalName
myGroupID
или myGroupValue
, и если да, то мне придется использовать мою логику проверки, имеет ли уже обработанная часть файла какие-либо как значение текущего элемента.
Но при таком подходе я без необходимости повторяю другие теги [кроме myGroupID
и myGroupValue
], что является пустой тратой времени, как кажется.
Любая идея, как мы можем напрямую перейти к тегам с конкретными именами внутри элемента?
Не говоря уже о том, что у меня было 0 или даже меньше знаний по синтаксическому анализу stax, и у меня была возможность изучить его сегодня, и я должен использовать java для этого разбора.
Заранее благодарим за наши предложения.
Update:
Спасибо всем за ваши ценные входы. Как сейчас, я использую API-интерфейс Stax Iterator для решения этого требования, и, похоже, он работает довольно быстро. Более того, память, используемая кодом, также приемлема ~3mb
, тогда как общий размер файла, который я обрабатываю, составляет 55mb
. Таким образом, все будет хорошо для меня.
Всего несколько вещей, которые меня беспокоят: - XML содержит leading
и training
пробелов и '-' character
. Любые предложения о том, как мы можем избавиться от них, когда мы не разбираемся в файле, но напрямую анализируем XML, поступающий из входного потока HTTPConnection
?
У меня нет выбора получения лучшего XML здесь [без leading
и trailing spaces
и '-' character
], как XML я получаю на самом деле ответ службы из другой системы, и они не готовы изменить их код для удовлетворения требований нашей системы.
Ваш первый, лучший вариант - прекратить хранить в целом целую пару данных данных, хранящихся в файле XML. : P Для этого не нужен XML, и теперь вы ждете последствий этого дизайнерского решения. – cHao
Попробуйте использовать парсер vtd xml, но cHao прав в своем комментарии. – vzamanillo
@cHao XML - это в основном ответ, который мы получали от службы другой системы. Спасибо за ваше предложение. Я не мог согласиться с вами больше: P –