当前位置:  开发笔记 > 运维 > 正文

如何使用libxml2修改现有的xml文件?

如何解决《如何使用libxml2修改现有的xml文件?》经验,为你挑选了1个好方法。

我需要获取一个现有的xml文件,并修改一些属性并将文件写回.

我正在考虑使用libxml2来完成这项工作.应用程序是在Linux上运行的C/C++.

事实上,libxml2似乎包括厨房水槽的几种变体,以及便携式洗手间,淋浴和通过相同管道连接的各种其他东西.有不同的解析器可用,以及不同的处理方式.对于之前没有使用过libxml2的人来说,这有点令人生畏.

我应该看一下哪个例子,最后,我的输出.xml与原始输入文件相同,加上我所做的更改?到目前为止,我一直在使用libxml2的tree1.c,tree2.c和reader1.c示例,但只有这些输出xml不会在任何地方接近相同.



1> Brian R. Bon..:
#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);

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有