我需要获取一个现有的xml文件,并修改一些属性并将文件写回.
我正在考虑使用libxml2来完成这项工作.应用程序是在Linux上运行的C/C++.
事实上,libxml2似乎包括厨房水槽的几种变体,以及便携式洗手间,淋浴和通过相同管道连接的各种其他东西.有不同的解析器可用,以及不同的处理方式.对于之前没有使用过libxml2的人来说,这有点令人生畏.
我应该看一下哪个例子,最后,我的输出.xml与原始输入文件相同,加上我所做的更改?到目前为止,我一直在使用libxml2的tree1.c,tree2.c和reader1.c示例,但只有这些输出xml不会在任何地方接近相同.
#include#include #include //Load in the xml file from disk xmlDocPtr pDoc = xmlParseFile("file.xml"); //Or from a string xmlDocPtr pDoc = xmlNewDoc(" "); //Do something with the document //.... //Save the document back out to disk. xmlSaveFileEnc("file.xml", pDoc, "UTF-8");
你想要的主要东西可能是这些功能:
xmlNodePtr pNode = xmlNewNode(0, (xmlChar*)"newNodeName"); xmlNodeSetContent(pNode, (xmlChar*)"content"); xmlAddChild(pParentNode, pNode); xmlDocSetRootElement(pDoc, pParentNode);
这是一个使用xpath选择内容的简单示例:
//Select all the user nodes xmlChar *pExpression((xmlChar*)_T("/users/user")); xmlXPathObjectPtr pResultingXPathObject(getnodeset(pDoc, pExpression)); if (pResultingXPathObject) { xmlNodeSetPtr pNodeSet(pResultingXPathObject->nodesetval); for(int i = 0; i < pNodeSet->nodeNr; ++i) { xmlNodePtr pUserNode(pNodeSet->nodeTab[i]); //do something with the node } } xmlXPathFreeObject(pResultingXPathObject);