1
이것은 실제로 2GB 이상인 샘플 XML 파일입니다. 내가이 정도 달성 VTD-XML을 사용하여 :attr 이름을 하드 코딩하지 않고 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
내가 원하는 무엇 :
,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 val의 인덱스입니다 ... –