Пример XML
<?xml version="1.0" encoding="UTF-8"?>
<Document>
<Report>
<Node>
<Detail>
<Id>1</Id>
<Value>Value 1</Value>
<Tag1>
<Owner>
<Id>
<INT>12345</INT>
</Id>
</Owner>
</Tag1>
</Detail>
<Status>
<Result>Pass</Result>
</Status>
</Node>
<Node>
<Detail>
<Id>2</Id>
<Value>Value 2</Value>
<Tag1>
<Owner>
<Id>
<String>TEST</String>
</Id>
</Owner>
</Tag1>
</Detail>
<Status>
<Result>Fail</Result>
</Status>
</Node>
<Node>
<Detail>
<Id>3</Id>
<Value>Value 3</Value>
<Tag1>
<Owner>
<Id>
<UN>UNKNOWN</UN>
</Id>
</Owner>
</Tag1>
</Detail>
<Status>
<Result>Waiting</Result>
</Status>
</Node>
</Report>
</Document>
Основываясь на приведенной выше структуре, я хочу прочитать элементы / атрибуты и заполнить POJO (предпочтительно XPath), поскольку путь к элементу не согласован, например: <Tag1>
.
Я не могу понять, как поступить.Я пытался использовать AutoPilot, но он считывает данные последовательно, например, все идентификаторы узлов.Я не могу найти способ прочитать все данные в <Node>
, а затем перейти к следующему и так далее.В конце мне нужно вернуть заполненную коллекцию POJO.
DOM выходит из области видимости, поскольку XML-файл огромен, размером от 800 МБ до 1 ГБ с прим.600 000+ <Node>
.
Заранее спасибо.
XML Reader
открытый процесс void (окончательный String fullPath) {
try {
final VTDGen vg = new VTDGen();
if (vg.parseFile(fullPath, false)) {
final VTDNav vn = vg.getNav();
final AutoPilot ap = new AutoPilot(vn);
ap.selectXPath(ROOT);
while ((ap.evalXPath()) != -1) {
final AutoPilot pilot1 = new AutoPilot(vn);
pilot1.selectXPath(ROOT + "/Detail/Id");
while (pilot1.evalXPath() != -1) {
final int t = vn.getText();
if (t != -1) {
System.out.println(vn.toNormalizedString(t));
}
final AutoPilot pilot2 = new AutoPilot(vn);
pilot2.selectXPath(ROOT + "/Status/Result");
if (pilot2.evalXPath() != -1) {
final int k = vn.getText();
if (k != -1) {
System.out.println(vn.toNormalizedString(k));
}
}
// pilot2.resetXPath();
}
}
}
}
catch (Exception exception) {
}
}