- 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|??分类: Linux |??标签: |字号大中小?订阅
这个指南基于一个简单的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 *)keyword))) {
③ key = xmlNodeListGetString(doc, cur-xmlChildrenNode, 1);
printf(keyword: %s\n, key);
xmlFree(key);
}
cur = cur-next;
}
return;
}
① 再次取得第一个子结点。
② 像上面那个循环一样,我们能过迭代,查找我们感兴趣的叫做“keyword”的元素。
③ 当我们找到元素“keyword”时,我们需要打印它包含在XML中
您可能关注的文档
- C++习题答案-2C+习题答案-2.doc
- C20砼压顶评定表C0砼压顶评定表.doc
- C++术语对照C++语对照.doc
- C7学校全员与人制度岗位育人职责C7学校全员与人制度、岗位育人职责.doc
- CAD 教程课件第七讲.doc
- C50普通砼配比水灰为0.33C50普通砼配比水灰比为0.33.doc
- CAD 教程课件第九讲.doc
- CAD 教程课件第六讲.doc
- CAD 教程课件第二讲.doc
- cad2010试题cd2010试题.doc
- 广东省广州市增城区2023-2024学年九年级上学期期末道德与法治试题(答案).doc
- 广东省广州市2021-2022学年九年级上学期期末模拟历史试题(含答案).docx
- 广东省广州市天河区暨南大学附属实验学校2022-2023学年九年级上学期期末历史试题.doc
- 广州市南沙区2023—2024学年第一学期九年级历史期末教学质量监测模拟试卷.doc
- 广东省广州市天河区暨南大学附属实验学校2022-2023学年九年级上学期期末历史试题(答案).doc
- 在全市县区委书记第五次工作座谈会上的讲话.docx
- 3篇中央政法工作会议发言材料汇编.docx
- 5篇贵州省庆祝第二十个中国记者节座谈会经验交流发言材料汇编.docx
- 在全市人大工作座谈会上的讲话.docx
- 在全市人大系统改革创新工作交流会上的讲话.docx
最近下载
- 电大地域文化(专) 2020春形成性考核任务三(权重:25%).docx
- 2024新人教版七年级英语上册期末综合测试试题.docx
- 【液压资料】“液压”课程设计.doc
- 2021年软件开发及项目管理课后练习答案.docx VIP
- 10万吨木薯淀粉新建项目可行性研究报告.doc
- 20230331-东北证券-京东健康-6618.HK-深度报告:医药电商龙头,建设“互联网+医疗”产业大闭环.pdf
- 2024年福建统招专升本《信息技术基础》知识考点汇编.pdf
- 学堂在线孙子兵法期末考试答案.docx
- 《区间信号自动控制》复习重点.pdf VIP
- 京东健康股份有限公司2023环境、社会及管治报告.pdf
文档评论(0)