我有一个文件org.w3c.dom.Document,我想替换xml中的特定标签的值。我试过以下但不知何故它不起作用。它不会给出错误但我看不到值的变化
org.w3c.dom.Document中
public boolean SetTextInTag(Document doc, String tag, String nodeValue)
{
Node node = getFirstNode(doc, tag);
if( node != null){
node.setNodeValue(nodeValue);
return true;
}
return false;
}
EG
<mytag> this value is to be changed </mytag>
我希望将标记值修改为nodeValue。我的代码不会给出任何错误但我看不到值的变化。
答案 0 :(得分:4)
尝试使用node.setTextContent(nodeValue)
代替node.setNodeValue(nodeValue)
。
答案 1 :(得分:2)
在节点上使用setNodeValue
来更改它的值将起作用,但前提是它只是一个Text节点。很有可能,在不是文本节点的节点上调用setNodeValue
方法。实际上,您的代码可能正在修改Element节点,因此没有任何结果。
为了进一步解释,您的文件是:
<mytag> this value is to be changed </mytag>
实际上被解析器视为:
Element (name = mytag, value = null)
- TextNode (name = #text, value= " this value is to be changed ")
元素节点的值始终为null,因此在它们上设置值不会修改子文本节点的值。使用其中一个答案中建议的setTextContent将起作用,因为它会修改TextNode的值而不是Element。
您也可以使用setNodeValue更改值,但仅在检测到节点是否为TextNode之后:
if (node != null && node.getNodeType() == Node.TEXT_NODE) {
node.setNodeValue(nodeValue);
return true;
}
答案 2 :(得分:1)
您需要编写xml文件以查看更改。你这样做了吗?
节点的价值不一定是您认为的。看看这里的表格: documentation
您最好将replaceChild
功能用于您的目的。那是
Node newChild = document.createTextNode("My new value");
Node oldChild = // Get the child you want to replace...
replaceChild(newChild, oldChild);
请记住,您要替换的是一个文本节点,它是您刚刚查找的标记的子节点。很可能,Node oldChild = node.getFirstChild;
正是您所寻找的。 p>
答案 3 :(得分:0)
查看此代码......可能会帮助你。
<folks>
<person>
<name>Sam Spade</name>
<email>samspade@website.com</email>
</person>
<person>
<name>Sam Diamond</name>
<email>samdiamond@website.com</email>
</person>
<person>
<name>Sam Sonite</name>
<email>samsonite@website.com</email>
</person>
</folks>
以下是解析和更新节点值的代码......
public void changeContent(Document doc,String newname,String newemail) {
Element root = doc.getDocumentElement();
NodeList rootlist = root.getChildNodes();
for(int i=0; i<rootlist.getLength(); i++) {
Element person = (Element)rootlist.item(i);
NodeList personlist = person.getChildNodes();
Element name = (Element)personlist.item(0);
NodeList namelist = name.getChildNodes();
Text nametext = (Text)namelist.item(0);
String oldname = nametext.getData();
if(oldname.equals(newname)) {
Element email = (Element)personlist.item(1);
NodeList emaillist = email.getChildNodes();
Text emailtext = (Text)emaillist.item(0);
emailtext.setData(newemail);
}
}
}