我想使用dom修改xml文件,但是当我制作node.getNodeValue();时。它返回空值!我不知道为什么?我的xml文件包含以下标签:
[person] which contains child [name] which contains childs [firstname ,middleInitial ,lastName] childs

我想使用dom更新名字,middleInitial和姓氏
这是我的Java dom处理文件:
    NodeList refPeopleList = doc.getElementsByTagName(“ person”);

for (int i = 0; i < refPeopleList.getLength(); i++) { NodeList personList = refPeopleList.item(i).getChildNodes(); for (int personDetalisCnt = 0; personDetalisCnt < refPeopleList.getLength(); personDetalisCnt++) { { currentNode = personList.item(personDetalisCnt); String nodeName = currentNode.getNodeName(); System.out.println("node name is " + nodeName); if (nodeName.equals("name")) { System.out.println("indise name"); NodeList nameList = currentNode.getChildNodes(); for(int cnt=0;cnt<nameList.getLength();cnt++) { currentNode=nameList.item(cnt); if(currentNode.getNodeName().equals("firstName")) { System.out.println("MODIFID NAME :"+currentNode.getNodeValue()); //prints null System.out.println("indide fname"+" node name is "+currentNode.getNodeName()); //prints firstName String nodeValue="salma"; currentNode.setNodeValue(nodeValue); System.out.println("MODIFID NAME :"+currentNode.getNodeValue());//prints null } } } }

最佳答案

而不是在getNodeValue()元素节点上调用setNodeValue() / <firstName>,请尝试获取firstName元素的文本节点子级,然后在其上调用getNodeValue() / setNodeValue()

尝试

if(currentNode.getNodeName().equals("firstName"))
{
   Node textNode = currentNode.getFirstChild();
   System.out.println("Initial value:" + textNode.getNodeValue());
   String nodeValue="salma";
   textNode.setNodeValue(nodeValue);
   System.out.println("Modified value:" + textNode.getNodeValue());
}


DOM spec中,


  属性nodeName,nodeValue和
  属性作为一种机制包括在内
  无需获取节点信息
  转换为特定的派生
  接口。如果没有
  这些属性的明显映射
  对于特定的nodeType(例如,
  元素或属性的nodeValue
  进行评论),则返回null。


类似地,在Node interface的Java文档中,靠近顶部的表显示元素的nodeValue为null。

这就是为什么在元素上使用getNodeValue始终返回null的原因,以及为什么需要首先使用getFirstChild()来获取文本节点的原因(假设没有其他子节点)。如果元素和文本子节点混合在一起,则可以使用getNodeType()来检查哪个子节点(文本是类型3)。

关于java - XML Dom处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4018342/

10-10 00:58