【转】libxml2 如何获得某个节点的所有信息

时间:2021-12-17 09:12:26

网址:http://bbs.csdn.net/topics/380115580

顶楼:

我的需求是这样的,我使用libxml2从内存中解析一个xml文件,需要修改某个节点下的一个子节点,修改完成之后,我只想取得上面的那个节点中的所有内容信息,并不想获取整个xml文件信息,然后拿这个节点的所有信息进行其他操作,如:输出到文件中,或写入的一个变量中,再进行其他操作…… 求各位大侠不吝赐教!例如:
<domain type="kvm">
  <name>xuteng-win7</name> 
  <uuid>3906e42c-2002-1902-c474-52c222b95e91</uuid> 
  <memory>4194304</memory> 
  <currentMemory>1048576</currentMemory> 
  <vcpu>2</vcpu> 
  <os>
  <type arch="x86_64" machine="rhel6.0.0">hvm</type> 
  <boot dev="hd" /> 
  </os>
</domain>

当我修改os节点后
  <os>
  <type arch="x86_64" machine="rhel6.0.0">hvm</type> 
  <boot dev="ssssss" /> 
  </os>
现在我只想得到os节点的所有内容,如上所示,请问该如何实现,或许libxml2已经有相应的API函数,但是我没有找到,希望大虾们不吝赐教,在下感激不尽!

1楼:

呵呵,问题已经解决! 翻遍了libxml2的API,在tree.h中有两个函数被我发现,一个是xmlNodeDump,另一个是xmlNodeDumpOutput,我用的是第一个,另一个用法基本上一样,有兴趣的童鞋们可以试试! 
具体做法是定义一个指针变量 xmlBufferPtr xml_buf = NULL;
然后创建xmlBUfferPtr, xml_buf = xmlBufferCreate();
再调用 xmlNodeDump(xml_buf, doc, node, 0, 0);
再将该节点的内容存入一个变量当中: const xmlChar xml = xmlBufferContent(xml_buf);

用完之后释放内存 
xmlFree(xml);
xmlBufferFree(xml_buf);
xmlFreeDoc(doc);
xmlCleanupParser();

ZZ