c语言xml字符串,C语言解析XML

本文详细介绍了如何使用C语言的libxml库解析XML文件,包括解析文档、获取元素内容、添加元素和属性,以及处理编码转换。通过示例代码展示了如何查找并打印XML中的关键词,以及如何在文档中添加新元素和属性。此外,还提到了libxml的XPath支持,用于高效定位文档中的特定元素。最后,讲解了如何处理编码兼容问题,确保数据在不同编码格式间的正确转换。
摘要由CSDN通过智能技术生成

《C语言解析XML》由会员分享,可在线阅读,更多相关《C语言解析XML(23页珍藏版)》请在人人文库网上搜索。

1、XML文件的解析libxml库函数解释转libxml(一)摘要 Libxml是一个有免费许可的用于处理XML、可以轻松跨越多个平台的C语言库。这个指南提供它的基本函数的例子。绪论 Libxml是一个实现读、创建及操纵XML数据功能的C语言库。这个指南提供例子代码并给出它基本功能的解释。在这个项目的主页上有Libxml及更多关于它可用的资料。包含有完整的API文档。这个指南并不能替代这些完整的文档,但是阐明功能需要使用库来完成基本操作。 这个指南基于一个简单的XML应用,它使用我写的一篇文章生成,它包含有元数据和文章的主体。本指南中的例子代码示范如何做到: 解析文档 取得指定元素的文本 添加一个。

2、元素及它的内容 添加一个属性 取得一个属性的值 例子的完整代码包含在附录中 数据类型 Libxml定义了许多数据类型,我们将反复碰到它们,它隐藏了杂乱的来源以致你不必处理它除非你有特定的需要。xmlChar 替代char,使用UTF-8编码的一字节字符串。如果你的数据使用其它编码,它必须被转换到UTF-8才能使用libxml的函数。在libxml编码支持WEB页面有更多关于编码的有用信息。 XmlDoc 包含由解析文档建立的树结构,xmlDocPtr是指向这个结构的指针。xmlNodePtr and xmlNode 包含单一结点的结构xmlNodePtr是指向这个结构的指针,它被用于遍历文档树。

3、。 解析文档 解析文档时仅仅需要文件名并只调用一个函数,并有错误检查。完整代码:附录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 documentn); xmlFreeDoc(doc); return。

4、; 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编码信。

5、息包含在XML标准中。 取得文档根元素 检查确认当前文档中包含内容。 在这个例子中,我们需要确认文档是正确的类型。“Story”是在这个指南中使用文档的根类型。 取得元素内容 你找到在文档树中你要查找的元素后可以取得它的内容。在这个例子中我们查找“story”元素。进程将在冗长的树中查找我们感兴趣的元素。我们假定期你已经有了一个名为doc的xmlDocPtr和一个名为cur的xmlNodPtr。 cur = cur-xmlChildrenNode; while (cur != NULL) if (!xmlStrcmp(cur-name, (const xmlChar *)storyinfo) 。

6、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 (!xml。

7、Strcmp(cur-name, (const xmlChar *)keyword) key = xmlNodeListGetString(doc, cur-xmlChildrenNode, 1); printf(keyword: %sn, key); xmlFree(key); cur = cur-next; return; 再次取得第一个子结点。 像上面那个循环一样,我们能过迭代,查找我们感兴趣的叫做“keyword”的元素。 当我们找到元素“keyword”时,我们需要打印它包含在XML中的记录的内容,文本被包含于元素的子结点中,因此我们借助了cur-xmlChildrenNode,为了。

8、取得文本,我们使用函数xmlNodeListGetString,它有一个文档指针参数,在这个例子中,我们仅仅打印它。 注释 因为xmlNodeListGetString为它返回的字符串分配内存,你必须使用xmlFree释放它。 使用XPath取得元素内容除了一步步遍历文档树查找元素外,Libxml2包含支持使用Xpath表达式取得指定结点集。完整的Xpath API文档在这里。Xpath允许通过路径文档搜索匹配指定条件的结点。在下面的例子中,我们搜索文档中所有的“keyword”元素。注释 下

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值