分类: C/C++
2013-01-21 17:31:45
查看xml文档:删除value2这个节点:some text another text another text 2 if ( !xmlStrcmp( node->name, (const xmlChar*)"value2") ) { xmlNodePtr node_to_del = node; node = node->next; xmlUnlinkNode( node_to_del ); xmlFreeNode( node_to_del ); }再次查看xml文档:some text another text 2 留下空行,相当别扭啊。 讲讲xml文档的结构先,其肉眼没看见的结构如下(以value1、value2、value3为例): 文本节点 ( "<0d> " ) value1 节点 文本节点 ( "<0d> " ) value2节点 文本节点 ( "<0d> " ) value3节点 当使用xmlUnlinkNode删除value2节点时,xml文档剩下如下内容: 文本节点 ( "<0d> " ) value1 节点 文本节点 ( "<0d> " ) 文本节点 ( "<0d> " ) value3节点 文本节点 ("<0d> ") 注意上面的两行文本节点,这就是产生空白行的原因。我们对症下药,删除value2节点前面那个文本节点即可:参考:xmlUnlinkNode(cur); /* delete the value2 node */ xmlFreeNode(cur); cur = tmpPtr; tmpPtr = cur->prev; xmlUnlinkNode(tmpPtr); /* delete text node */ xmlFreeNode(tmpPtr); xmlSaveFile("test.xml", doc);/* 注意要保存好文档 */