检索数据的我示例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解析器,但其每天近服用解析XML 80000分的。
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个。如果你只工作单线程,那意味着一个xml的1/20秒。如果xml文件的大小如你所说,你永远无法在0.05秒内解析它,尤其是当它们可能是你可能无法控制的其他开销(例如读取xml文件时的网络/磁盘延迟)。所以为了达到你的目标,你首先需要平行工作。然后可能考虑将数据放入数据库以便查询,因此当您的查询明天发生变化时,您不必重新解析所有文档。但数据库也需要计划 – cello
是的,先生。其实我最终使用Vtd-Xml实现。我也渴望听到你的答案。 –