У меня есть образец xml
<?xml version="1.0" encoding="UTF-8"?>
<tag_1>
<tag_2>A</tag_2>
<tag_3>B</tag_3>
<tag_4>C</tag_4>
<tag_5>D</tag_5>
</tag_1>
</xml>
Теперь мне интересно извлекать только определенные данные.
Например
tag_1/tag_5 -> D
tag_1/tag_5
- это мое определение данных (единственные данные, которые мне нужны), которое является динамическим по своей природе, что означает, что завтра tag_1/tag_4 будет моим определением данных.
Так что на самом деле мой xml представляет собой большой набор данных. И эти полезные нагрузки xml составляют от 50 000 до 80 000 в час.
Я хотел бы знать, есть ли уже высокопроизводительный инструмент для чтения xml или какая-то специальная логика, которую я могу реализовать, которая извлекает данные в зависимости от определения данных.
В настоящее время у меня есть реализация с использованием синтаксического анализатора Stax, но для анализа 80 000 xml требуется почти день.
public class VTDParser {
private final Logger LOG = LoggerFactory.getLogger(VTDParser.class);
private final VTDGen vg;
public VTDParser() {
vg = new VTDGen();
}
public String parse(final String data, final String xpath) {
vg.setDoc(data.getBytes());
try {
vg.parse(true);
} catch (final ParseException e) {
LOG.error(e.toString());
}
final VTDNav vn = vg.getNav();
final AutoPilot ap = new AutoPilot(vn);
try {
ap.selectXPath(xpath);
} catch (final XPathParseException e) {
LOG.error(e.toString());
}
try {
while (ap.evalXPath() != -1) {
final int val = vn.getText();
if (val != -1) {
return vn.toNormalizedString(val);
}
}
} catch (XPathEvalException | NavException e) {
LOG.error(e.toString());
}
return null;
}
}