libxml2编译(编译lib文件)

libxml2编译(编译lib文件)include lt stdio h gt include lt libxml parser h gt include lt libxml tree h gt include lt iostream gt include xml h using

大家好,我是讯享网,很高兴认识大家。



#include <stdio.h> #include <libxml/parser.h> #include <libxml/tree.h> #include <iostream> #include xml.h using namespace std; #pragma comment(lib,”https://www.cnblogs.com/chenshikun/p/libxml2/lib/libxml2.lib”) void creatXML() {

讯享网

讯享网</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">定义文档和节点指针</span> 

xmlDocPtr doc </span>= xmlNewDoc(BAD_CAST<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">1.0</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">); xmlNodePtr root_node </span>= xmlNewNode(NULL,BAD_CAST<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">root</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置根节点</span> 

讯享网xmlDocSetRootElement(doc,root_node); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">在根节点中直接创建节点</span> 


讯享网

xmlNewTextChild(root_node, NULL, BAD_CAST </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">newNode1</span><span style="color: rgba(128, 0, 0, 1)">"</span>, BAD_CAST <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">newNode1 content</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">); xmlNewTextChild(root_node, NULL, BAD_CAST </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">newNode2</span><span style="color: rgba(128, 0, 0, 1)">"</span>, BAD_CAST <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">newNode2 content</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">); xmlNewTextChild(root_node, NULL, BAD_CAST </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">newNode3</span><span style="color: rgba(128, 0, 0, 1)">"</span>, BAD_CAST <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">newNode3 content</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">创建一个节点,设置其内容和属性,然后加入根结点</span> 

讯享网xmlNodePtr node </span>= xmlNewNode(NULL,BAD_CAST<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">node2</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">); xmlNodePtr content </span>= xmlNewText(BAD_CAST<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">NODE CONTENT</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">); xmlAddChild(root_node,node); xmlAddChild(node,content); xmlNewProp(node,BAD_CAST</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">attribute</span><span style="color: rgba(128, 0, 0, 1)">"</span>,BAD_CAST <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">yes</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">创建一个儿子和孙子节点</span> 

node </span>= xmlNewNode(NULL, BAD_CAST <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">son</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">); xmlAddChild(root_node,node); xmlNodePtr grandson </span>= xmlNewNode(NULL, BAD_CAST <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">grandson</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">); xmlAddChild(node,grandson); xmlAddChild(grandson, xmlNewText(BAD_CAST </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">This is a grandson node</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">存储xml文档</span> <span style="color: rgba(0, 0, 255, 1)">int</span> nRel = xmlSaveFile(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">CreatedXml.xml</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,doc); </span><span style="color: rgba(0, 0, 255, 1)">if</span> (nRel != -<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">) { cout</span>&lt;&lt;<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">一个xml文档被创建,写入</span><span style="color: rgba(128, 0, 0, 1)">"</span>&lt;&lt;nRel&lt;&lt;<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">个字节</span><span style="color: rgba(128, 0, 0, 1)">"</span>&lt;&lt;<span style="color: rgba(0, 0, 0, 1)">endl; } </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">释放文档内节点动态申请的内存</span> 

xmlFreeDoc(doc); }

void readXML() {

讯享网xmlDocPtr doc; </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">定义解析文档指针</span> xmlNodePtr curNode; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">定义结点指针(你需要它为了在各个结点间移动)</span> xmlChar *szKey; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">临时字符串变量</span> <span style="color: rgba(0, 0, 255, 1)">char</span> *<span style="color: rgba(0, 0, 0, 1)">szDocName; szDocName </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">https://www.cnblogs.com/chenshikun/p/CreatedXml.xml</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">; doc </span>= xmlReadFile(szDocName,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">GB2312</span><span style="color: rgba(128, 0, 0, 1)">"</span>,XML_PARSE_RECOVER); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">解析文件 </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">检查解析文档是否成功,如果不成功,libxml将指一个注册的错误并停止。 </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">一个常见错误是不适当的编码。XML标准文档除了用UTF-8或UTF-16外还可用其它编码保存。 </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">如果文档是这样,libxml将自动地为你转换到UTF-8。更多关于XML编码信息包含在XML标准中.</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (NULL ==<span style="color: rgba(0, 0, 0, 1)"> doc) { cout</span>&lt;&lt;<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Document not parsed successfully</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">; </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> ; } curNode </span>= xmlDocGetRootElement(doc); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">确定文档根元素</span> <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">检查确认当前文档中包含内容</span><span style="color: rgba(0, 128, 0, 1)">*/</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (NULL ==<span style="color: rgba(0, 0, 0, 1)"> curNode) { cout</span>&lt;&lt;<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">empty document</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">; xmlFreeDoc(doc); </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> ; } </span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">在这个例子中,我们需要确认文档是正确的类型。“root”是在这个示例中使用文档的根类型。</span><span style="color: rgba(0, 128, 0, 1)">*/</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (xmlStrcmp(curNode-&gt;name, BAD_CAST <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">root</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)) { cout</span>&lt;&lt;<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">document of the wrong type, root node != root</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">; xmlFreeDoc(doc); </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> ; } curNode </span>= curNode-&gt;<span style="color: rgba(0, 0, 0, 1)">xmlChildrenNode; xmlNodePtr propNodePtr </span>=<span style="color: rgba(0, 0, 0, 1)"> curNode; </span><span style="color: rgba(0, 0, 255, 1)">while</span>(curNode !=<span style="color: rgba(0, 0, 0, 1)"> NULL) { </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">取出节点中的内容</span> <span style="color: rgba(0, 0, 255, 1)">if</span> ((!xmlStrcmp(curNode-&gt;name, (<span style="color: rgba(0, 0, 255, 1)">const</span> xmlChar *)<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">newNode1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">))) { szKey </span>=<span style="color: rgba(0, 0, 0, 1)"> xmlNodeGetContent(curNode); cout</span>&lt;&lt;<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">newNode1</span><span style="color: rgba(128, 0, 0, 1)">"</span>&lt;&lt;<span style="color: rgba(0, 0, 0, 1)">szKey; xmlFree(szKey); } </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">查找带有属性attribute的节点</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (xmlHasProp(curNode,BAD_CAST <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">attribute</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)) { propNodePtr </span>=<span style="color: rgba(0, 0, 0, 1)"> curNode; } curNode </span>= curNode-&gt;<span style="color: rgba(0, 0, 0, 1)">next; } </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">查找属性</span> xmlAttrPtr attrPtr = propNodePtr-&gt;<span style="color: rgba(0, 0, 0, 1)">properties; </span><span style="color: rgba(0, 0, 255, 1)">while</span> (attrPtr !=<span style="color: rgba(0, 0, 0, 1)"> NULL) { </span><span style="color: rgba(0, 0, 255, 1)">if</span> (!xmlStrcmp(attrPtr-&gt;name, BAD_CAST <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">attribute</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)) { xmlChar</span>* szAttr = xmlGetProp(propNodePtr,BAD_CAST <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">attribute</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">); cout</span>&lt;&lt;<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">get attribute = </span><span style="color: rgba(128, 0, 0, 1)">"</span>&lt;&lt;szAttr&lt;&lt;<span style="color: rgba(0, 0, 0, 1)">endl; xmlFree(szAttr); } attrPtr </span>= attrPtr-&gt;<span style="color: rgba(0, 0, 0, 1)">next; } xmlFreeDoc(doc); 

}

int main() {

creatXML(); 

}


小讯
上一篇 2025-05-15 13:50
下一篇 2025-05-16 07:06

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/161196.html