欢迎来到天天文库
浏览记录
ID:16126501
大小:28.47 KB
页数:22页
时间:2018-08-08
《c语言解析xml.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
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是指向这个结构的指针。xmlNodePtrandxmlNode包含单一结点的结构xmlNodePtr是指向这个结
3、构的指针,它被用于遍历文档树。 解析文档解析文档时仅仅需要文件名并只调用一个函数,并有错误检查。完整代码:附录C,Keyword例程代码 ①xmlDocPtrdoc;②xmlNodePtrcur;③doc=xmlParseFile(docname);④if(doc==NULL){fprintf(stderr,"Documentnotparsedsuccessfully.");return;}⑤cur=xmlDocGetRootElement(doc);⑥if(cur==NULL){fprintf(stderr,"emptydocument");xmlFreeDoc(d
4、oc);return;}⑦if(xmlStrcmp(cur->name,(constxmlChar*)"story")){fprintf(stderr,"documentofthewrongtype,rootnode!=story");xmlFreeDoc(doc);return;}①定义解析文档指针。②定义结点指针(你需要它为了在各个结点间移动)。④检查解析文档是否成功,如果不成功,libxml将指一个注册的错误并停止。 注释一个常见错误是不适当的编码。XML标准文档除了用UTF-8或UTF-16外还可用其它编码保存。如果文档是这样,libxml将自动地为你转换到UTF-8
5、。更多关于XML编码信息包含在XML标准中。⑤取得文档根元素⑥检查确认当前文档中包含内容。⑦在这个例子中,我们需要确认文档是正确的类型。“Story”是在这个指南中使用文档的根类型。 取得元素内容 你找到在文档树中你要查找的元素后可以取得它的内容。在这个例子中我们查找“story”元素。进程将在冗长的树中查找我们感兴趣的元素。我们假定期你已经有了一个名为doc的xmlDocPtr和一个名为cur的xmlNodPtr。①cur=cur->xmlChildrenNode;②while(cur!=NULL){ if((!xmlStrcmp(cur->name,(constxmlC
6、har*)"storyinfo"))){parseStory(doc,cur);}cur=cur->next;} ①取得cur的第一个子结点,cur指向文档的根,即“story”元素。②这个循环迭代通过“story”的子元素查找“storyinfo”。这是一个包含有我们将查找的“keywords”的元素。它使用了libxml字符串比较函数xmlStrcmp。如果相符,它调用函数parseStory。 voidparseStory(xmlDocPtrdoc,xmlNodePtrcur){xmlChar*key;①cur=cur->xmlChildrenNode;②while(c
7、ur!=NULL){if((!xmlStrcmp(cur->name,(constxmlChar*)"keyword"))){③key=xmlNodeListGetString(doc,cur->xmlChildrenNode,1);printf("keyword:%s",key);xmlFree(key);}cur=cur->next;}return;}①再次取得第一个子结点。②像上面那个循环一样,我们能过迭代,查找我们感兴趣的叫做“keyword”的元素。③当我们找到元素“keyword”时,我
此文档下载收益归作者所有