天天看点

libxml2 中常用函数总结

1. 创建和编辑XML文档

1.生成文档树
	xmlDocPtr xmlNewDoc(xmlChar *version);
2.生成节点
	xmlNodePtr xmlNewNode(xmlNsPtr ns, name);//生成新节点
	xmlNodePtr xmlNewChild(parentNode,ns,name,content);//生成新节点,作为parentnode的子节点
	xmlNodePtr xmlNewText(content);//生成文本节点
3.设置属性
	xmlAttrPtr xmlNewProp(node, attributeName,attributeValue);//给node添加属性
	xmlAttrPtr xmlSetProp(node,attributeName,attributeValue);//添加(或者重置)属性
4.添加节点点
	//将childnode添加到parentnode节点下。该方法可以添加一般节点,也可以添加节点内容(节点内容是文本节点,也是节点)
	//对于相邻的多个文本节点, 该方法会将其合并成为一个文本节点,并返回该合并节点
	xmlNodePtr xmlAddChild(parentnode,childnode);
	//设置文档树节点根节点为rootnode,原根节点及其下的子节点信息都脱离了文档树
	//原根节点是否需要施放?
	xmlNodePtr xmlDocSetRootElement(doc,rootnode);
5.移除节点
	void xmlUnlinkNode(node);//移除节点,node没有释放(调用xmlFreeNode())
6.保存
	//filename如果为"-",则输出到stdout
	//可以指定保存编码,如果format=1,保存时会格式化
	int xmlSaveFormatFileEnc(filename,doc,encoding,format);
	//不指定编码
	int xmlSaveFormatFile(filename,doc,format);
	//不进行格式化
	int xmlSaveFile(filename,doc);           

2. xmlTextReader解析文档

1.创建xmlTextReader对象
	//从文件创建xmlTextReader对象
	xmlTextReaderPtr xmlReaderForFile(filename or url,encoding,parseOptions);
	//URL不知道是做什么用的,貌似随便提供一个就可以
	xmlTextReaderPtr xmlReaderForMemory(char buffer,size of buffer,URL,encoding,parseOptions);
2.读取stream中的节点, 移动current instance 指向节点
	//在创建xmlTextReader后, 此时current instance 尚未指向第一个节点,需要首先调用该方法
	//指向流中的下一个节点
	int xmlTextReaderRead(xmlTextReader);
	//调用睹如xmlTextReaderMoveToFirstAttribute等方法会改变current instance指向
	//使用此方法可以重新指向当前整个的节点
	int xmlTextReaderMoveToElement(xmlTextReader);
	//跳过当前节点的子树,指向下一个节点(可能是新节点的开始,也可能是一个节点的结束markup)
	int xmlTextReaderNext(xmlTextReader);
3.读取实体的信息,实体可能是节点, 也可能是属性
	//读取当前指向实体的名称(可能指向节点,此时是节点名称, 也可能指向属性,此时是属性名称)
	//该方法没有分配新的内存copy名称, 也就无需施放
	const xmlChar *xmlTextReaderConstName(xmlTextReader);
	//类似, 区别是需要xmlFree(xmlChar);
	xmlChar *xmlTextReaderName(xmlTextReader);
	//读取当前指向实体的名称(可能指向节点,此时是节点值, 也可能指向属性,此时是属性值)
	//该方法没有分配新的内存copy值, 也就无需施放
	const xmlChar *xmlTextReaderConstValue(xmlTextReade);
	//类似, 区别是需要xmlFree(xmlChar);
	xmlChar *xmlTextReaderValue(xmlTextReader);
	//移动current instance 指向当前节点的第一个属性
	int xmlTextReaderMoveToFirstAttribute(xmlTextReader);
	//移动current instance 指向当前属性的下一个属性
	int xmlTextReaderMoveToNextAttribute(xmlTextReader);
4.释放资源
	int xmlTextReaderClose(xmlTextReader);//应当在xmlFreeTextReader之前调用
	void xmlFreeTextReader(xmlTextReader);
           

3. 其他再补充