У меня есть пример XMLбыстро извлечения данных из 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;
}
}
Не знаю, почему я получил -1. Я не понятен? Я просто ищу идеи и не прошу кого-то реализовать меня. –
50-80 000/час, что соответствует 20 секундам. Если вы работаете только однопоточно, это означает 1/20 секунды для одного xml. Если файлы xml очень велики, как вы говорите, вы никогда не сможете проанализировать его в течение 0.05 секунд, тем более, что они могут быть другими накладными расходами, которые вы, вероятно, не можете контролировать (например, время ожидания сети/диска при чтении xml-файлов). Чтобы достичь своей цели, вам сначала нужно распараллелить работу. И тогда, вероятно, подумайте о том, чтобы помещать данные в базу данных для упрощения запросов, поэтому вам не нужно повторно анализировать все документы, когда завтра ваш запрос изменится. Но база данных также нуждается в планировании – cello
Да, сэр. Фактически я реализовал, наконец, использование Vtd-Xml. Я также хочу услышать ваш ответ. –