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

标签 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中,我们可以了解到节点“ecs:abc”是可选的。我想为所有人获取“ecs:def”的值。为此,我想遵循以下方法:

....
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()
}

但正如您所看到的,对于第二人称节点..由于“ecs:abc”不存在,因此“ecs:def”将位于第 0 个位置。那么有什么方法可以通过名称而不是通过相应“ecs:Person”节点的位置来获取子节点?

最佳答案

1 查找 getElementsByTagName("ecs:Person")

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("ecs:def")

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

关于java - 如何使用 DOM 解析器按 XML 中的名称访问子节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34140104/

相关文章:

java - 如何调整我的 DOMParser 以从 Java (Android) 上的 RSS 解析 "media:content"?

java - 如何定义 RequestMapping 优先级

android - 使用 LinearLayout 将按钮底部对齐

java - 创建动态元素自定义

java - 如何使用 java 解析 XML 中任何标记的 CDATA 部分中存在的元素标记

java - 将 xml 字符串作为文档传递返回 null

java - 如何将JFreeChart的图形保存为PNG图像?

java - JTable Actionlistener 单击带有参数的行

java - DocumentFilter 只允许将数字和句点 (.) 放入 JTextField 中?

javascript - 尝试将 xml 节点值中的小数四舍五入为两位数