我想使用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/