问题原因

在使用QDOM 类操作xml 的时候,更新一个QDomNode 的值,查看Qt的帮助文档
void QDomNode::setNodeValue(const QString & v)
Sets the node's value to v.
看翻译这个函数应该是可以设置QDomNode的value。但在具体使用的发现xml文档的值并没有发生改变,使用方法为下:

//这里简写代码  xml的打开和保存不在这里写了
QDomNode node.firstChild().setNodeValue("value");

解决办法

代码运行完后发现xml的值并没有发生改变,去重新查看文档,查看相关函数 nodeValue()时发现:

QString QDomNode::nodeValue() const
Returns the value of the node.

The meaning of the value depends on the subclass:

| Name  | Meaning  |
| ------------ | ------------ |
| QDomAttr  | The attribute value  |
| QDomCDATASection  | The content of the CDATA section  |
|  QDomComment | The comment  |
| QDomProcessingInstruction  | The data of the processing instruction  |
|  QDomText | The text  |
All the other subclasses do not have a node value and will return an empty string.
See also setNodeValue() and nodeName().

大概意思是 value必须上面的相关的子类。写一段代码估计就明白了:

QDomText text = doc.createTextNode("/*this can will empty*/");
text.setNodeValue("value");
QDomNode node.appendChild(text);

or

text = doc.createTextNode("value");
child.at(i).appendChild(text);

这时,xml文件中的值发生改变.也就是说setNodeValue 只对上面相关的子类有效。

发表评论

电子邮件地址不会被公开。 必填项已用*标注