如何使用DOM解析器在XML中按名称访问子节点?

时间:2015-12-07 17:58:14

标签: java xml domparser

我有以下格式的xml文件:

....
<ecs:Person>
     <ecs:abc>1234</ecs:abc>
     <ecs:def>9090</ecs:def>
</ecs:Person>
<ecs:Person>
     <ecs:def>1010</ecs:def>
</ecs:Person>
...

从xml以上,我们可以理解节点&#34; ecs:abc&#34;是可选的。我希望得到&#34; ecs:def&#34;为所有人。为此,我想按照以下方法:

....
int len = d.getElementsByTagName("ecs:Person").getLength();
for(int i=0;i < personLen;i++){
    print d.getElementsByTagName("ecs:Person").item(j).getChildNodes().item(1).getTextContent()
}

但正如你所看到的,对于第二人称节点......和#34; ecs:abc&#34;不存在所以&#34; ecs:def&#34;将在第0位。那么我有什么方法可以通过Name获取子节点而不是按位置获取相应的&#34; ecs:Person&#34;节点

1 个答案:

答案 0 :(得分:1)

1查找getElementsByTagName(&#34; ecs:Person&#34;)

import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

NodeList nList = d.getElementsByTagName("ecs:Person");

for (int temp = 0; temp < nList.getLength(); temp++) 
    {
    Node nNode = nList.item(temp);
    if (nNode.getNodeType() == Node.ELEMENT_NODE)
       {
       Element eElement = (Element) nNode;

不要使用索引0,1,......

在每个内部

2,查找getElementsByTagName(&#34; ecs:def&#34;)

       // DO IT AGAIN: 
       eElement.getElementsByTagName("ecs:def");