- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux环境下C使用XML解析库Linux环境下C使用的XML解析库
Linux环境下C使用的XML解析库:libxml2??
2010-12-09 18:16:58|??分类: HYPERLINK /blog/ \l m=0t=1c=fks_087069086094082065087081083095085087086067084087085074080 \o Linux Linux |??标签: |字号大中小?订阅
Libxml是一个实现读、创建及操纵XML数据功能的C语言库。这个指南提供例子代码并给 出它基本功能的解释。在这个项目的主页上有Libxml及更多关于它可用的资料。包含有完整的API文档。这个指南并不能替代这些完整的文档,但是阐明功 能需要使用库来完成基本操作。
这个指南基于一个简单的XML应用,它使用我写的一篇文章生成,它包含有元数据和文章的主体。
本指南中的例子代码示范如何做到:
? 解析文档
? 取得指定元素的文本
? 添加一个元素及它的内容
? 添加一个属性
? 取得一个属性的值
例子的完整代码包含在附录中
数据类型
Libxml定义了许多数据类型,我们将反复碰到它们,它隐藏了杂乱的来源以致你不必处理它 除非你有特定的需要。xmlChar 替代char,使用UTF-8编码的一字节字符串。如果你的数据使用其它编码,它必须被转换到UTF-8才能使用libxml的函数。在libxml编码 支持WEB页面有更多关于编码的有用信息。
XmlDoc 包含由解析文档建立的树结构,xmlDocPtr是指向这个结构的指针。
xmlNodePtr and xmlNode 包含单一结点的结构xmlNodePtr是指向这个结构的指针,它被用于遍历文档树。
解析文档
解析文档时仅仅需要文件名并只调用一个函数,并有错误检查。完整代码:附录C, Keyword例程代码
①xmlDocPtr doc;
②xmlNodePtr cur;
③doc = xmlParseFile(docname);
④if (doc == NULL ) {
fprintf(stderr,Document not parsed successfully. \n);
return;
}
⑤cur = xmlDocGetRootElement(doc);
⑥if (cur == NULL) {
fprintf(stderr,empty document\n);
xmlFreeDoc(doc);
return;
}
⑦if (xmlStrcmp(cur-name, (const xmlChar *) story)) {
fprintf(stderr,document of the wrong type, root node != story);
xmlFreeDoc(doc);
return;
}
①定义解析文档指针。
②定义结点指针(你需要它为了在各个结点间移动)。
④检查解析文档是否成功,如果不成功,libxml将指一个注册的错误并停止。
注释
一个常见错误是不适当的编码。XML标准文档除了用UTF-8或UTF-16外还可用其它编码保存。如果文档是这样,libxml将自动地为你转换到UTF-8。更多关于XML编码信息包含在XML标准中。
⑤取得文档根元素
⑥检查确认当前文档中包含内容。
⑦在这个例子中,我们需要确认文档是正确的类型。“Story”是在这个指南中使用文档的根类型。
取得元素内容
你找到在文档树中你要查找的元素后可以取得它的内容。在这个例子中我们查找“story”元素。进程将在冗长的树中查找我们感兴趣的元素。我们假定期你已经有了一个名为doc的xmlDocPtr和一个名为cur的xmlNodPtr。
①cur = cur-xmlChildrenNode;
②while (cur != NULL) {
if ((!xmlStrcmp(cur-name, (const xmlChar *)storyinfo))){
parseStory (doc, cur);
}
cur = cur-next;
}
①取得cur的第一个子结点,cur指向文档的根,即“story”元素。
②这个循环迭代通过“story”的子元素查找“storyinfo”。这是一个包含有我们将查找的“keywords”的元素。它使用了libxml字符串比较函数xmlStrcmp。如果相符,它调用函数parseStory。
void
parseStory (xmlDocPtr doc, xmlNodePtr cur) {
xmlChar *key;
① cur = cur-xmlChildrenNode;
②while (cur != NULL) {
if ((!xmlStrcmp(cur-name, (const xmlChar *)ke
您可能关注的文档
- 汽油机油规格简介汽油机油规格简介.pdf
- 汽电1202班龚文桐毕业设计(终极版)汽电1202班龚文桐毕业设计(终极版).doc
- 汽车4S店APP开发解决方案汽车4S店APP开发解决方案.pdf
- 汽车保养与维护课程实训设计方案汽车保养与维护课程实训设计方案.doc
- GGH安装作业指导书(式)GGH安装作业指导书(正式).doc
- 汽车厂薪资待遇汽车厂薪资待遇.doc
- 汽车前后制动鼓市场现状调研及发展前景分析报告(目录)汽车前后制动鼓市场现状调研及发展前景分析报告(目录).doc
- 汽车GPS导航系统汽车GPS导航系统.doc
- 汽车信息资料应用实训室汽车信息资料应用实训室.doc
- GH-QP-011 纠与预防措施控制程序GH-QP-011 纠正与预防措施控制程序.doc
- 2024年中国膏体中裂沥青乳化剂市场调查研究报告.docx
- [吉林]2024年吉林北华大学招聘博士人才22人笔试历年典型考题及解题思路分析附带答案详解.docx
- [十堰]2024年湖北十堰市竹溪县招聘高中阶段学校教师20人笔试历年典型考题及解题思路分析附带答案详.docx
- 2024年中国微波电路市场调查研究报告.docx
- 2024年中国智能数字会议系统市场调查研究报告.docx
- 2024年中国直接加热回转干燥机市场调查研究报告.docx
- 2024年中国自动纸盒批号印字机市场调查研究报告.docx
- 2024年中国冷冻冷藏库市场调查研究报告.docx
- 2024年中国卧式消防泵市场调查研究报告.docx
- 2024年中国励磁系统市场调查研究报告.docx
文档评论(0)