使用Java

时间:2018-07-14 13:22:01

标签: java xml

我有一个类似于以下文件的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"));
        }

如果有人可以帮助,谢谢!

1 个答案:

答案 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();