1
これは実際には2GBを超えるサンプルXMLファイルです。attr nameをハードコーディングせずにvtd-xmlを使用してXMLを解析する方法は?
現在のコード:
https://gist.github.com/shadow-fox/21d1d4f30cbed0909f403c3ac0e1fa4d
public void reader() throws IOException, ParseException, NavException, XPathParseExceptionHuge, NavExceptionHuge,
XPathEvalExceptionHuge {
VTDGenHuge vg = new VTDGenHuge();
if (vg.parseFile("sku_extract_main.xml",true,VTDGenHuge.MEM_MAPPED)) {
VTDNavHuge vnh = vg.getNav();
AutoPilotHuge aph = new AutoPilotHuge(vnh);
aph.selectElementNS("*", "*");
int i = 0;
while (aph.iterate()) {
int t = vnh.getText();
if (t != -1) {
System.out.println(vnh.toString(vnh.getCurrentIndex()) + "|||" + vnh.toNormalizedString(t));
i++;
}
}
}
}
現在の結果:
PVAL|||298374234
PVAL|||1231
PVAL|||brown
PVAL|||medium
PVAL|||7
PVAL|||solid
PVAL|||brown
私が欲しいもの:
を私はずっとこれを達成しているVTD-XMLを使用してSku_ID|||298374234
LotNum|||1231
COLOR|||brown
WIDTH|||medium
SIZE|||7
Pattern|||solid
Color Family|||brown
サンプルXML:
<?xml version="1.0" encoding="UTF-8" ?>
<RECORDS>
<RECORD>
<PROP NAME="Sku_ID">
<PVAL>298374234</PVAL>
</PROP>
<PROP NAME="LotNum">
<PVAL>1231</PVAL>
</PROP>
<PROP NAME="COLOR">
<PVAL>brown</PVAL>
</PROP>
<PROP NAME="WIDTH">
<PVAL>medium</PVAL>
</PROP>
<PROP NAME="SIZE">
<PVAL>7</PVAL>
</PROP>
<PROP NAME="Pattern">
<PVAL>solid</PVAL>
</PROP>
<PROP NAME="Color Family">
<PVAL>brown</PVAL>
</PROP>
</RECORD>
</RECORDS>
そして、私はattr
名前のハードコードにしたくありません。私はそれらを訪問するように私はそれらを取得したい。どうすればいい?以下は
あなたは何をやっていることにコメントを追加していただけますか? '' 'vnh.toNormalizedString(t)' 'これは私にattrの値を与えます。 298374234しかし、ifスコープでのみではなく、 '' 'IndexOutOfBoundsException'''を投げるwhileスコープではありません。そして '' 'vnh.toString(i + 1)' ''は私にattrの名前を与えます。 Sku_ID。 –
indexoutofBoundsExceptionとはどういう意味ですか? –
iはattrのインデックスです... i + 1は常にattrのインデックスです。 –