我有一个类似于以下文件的XML文件:
<rec>
<v001>001</v001>
<v002>2012609272311</v002>
<v003>616.890231</v003>
<v005>7</v005>
<v006>m</v006>
<v007>^a115001^b1^c1^d20100000^e2^fOvernight^m1</v007>
<v007>^a115002^b2^c1^d20100000^e1^m2</v007>
<v007>^a115003^b3^c1^d20100000^e1^m3</v007>
<v007>^a115004^b4^c1^d20100000^e1^m4</v007>
<v007>^a115005^b5^c1^d20100000^e1^m5</v007>
<v007>^a115006^b6^c1^d20100000^e1^m6</v007>
<v016>ROCHA, Ruth Mylius</v016>
<v018>Enfermagem em Saúde Mental</v018>
</rec>
“ rec”标签与注册表匹配,我需要计算v007标签在每个rec中重复多少次。我正在使用以下功能:
static private int getCount(Node parentNode, String childName) {
int qtdEx = 0;
NodeList nList = parentNode.getChildNodes();
for (int i = 0; i < nList.getLength(); i++) {
Node n = nList.item(i);
String name = n.getNodeName();
if (name != null && name.equals(childName)) {
return qtdEx++;
}
}
return 0;
}
此函数仅返回0,我对其进行如下测试:
NodeList nList = doc.getElementsByTagName("rec");
for (int i = 0; i < nList.getLength(); i++) {
Node node = nList.item(i);
List<Object> columns = null;
columns = Arrays.asList(getCount(node, "v007"));
}
如果有人可以帮助,谢谢!
答案 0 :(得分:2)
原因是由于String name = n.getNodeName();
会将v001
分配给name
,然后当遇到v002
时,程序将停止并返回。
您可以更改为以下内容:
private static int getCount(Node parentNode, String childName) {
int qtdEx = 0;
NodeList nList = parentNode.getChildNodes();
for (int i = 0; i < nList.getLength(); i++) {
Node n = nList.item(i);
String name = n.getNodeName();
if("v007".equals(name)){
qtdEx++;
}
}
return qtdEx;
}
实际上,如果您使用 xPath 和 dom4j ,事情将变得更加简单:
List list = doc.selectNodes("//rec/v007");
int count = list.size();