檢索數據的我示例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實現。我也渴望聽到你的答案。 –