Linux环境下C使用XML解析库Linux环境下C使用的XML解析库.doc

Linux环境下C使用XML解析库Linux环境下C使用的XML解析库.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

您可能关注的文档

文档评论(0)

zyongwxiaj8 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档