加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml

发布时间:2020-12-16 05:59:50 所属栏目:百科 来源:网络整理
导读:http://jianlee.ylinux.org/Computer/C/libxml.html 需求安装包:libxml2 和libxm2-devel,其中libxml主要包括.so文件,libxml2-devel 包括开发文档和所有的.h文件。可用rpm ?ql 命令查看,rpm ?qd可查看文档信息。 3.1 数据类型--xmlChar 在libXml中用xml

http://jianlee.ylinux.org/Computer/C/libxml.html

需求安装包:libxml2 和libxm2-devel,其中libxml主要包括.so文件,libxml2-devel 包括开发文档和所有的.h文件。可用rpm ?ql 命令查看,rpm ?qd可查看文档信息。


3.1 数据类型--xmlChar


在libXml中用xmlChar 替代char,XML使用UTF-8编码的一字节字符串。如果你的数据使用其它编码,它必须被转换到UTF-8才能使用libxml的函数。

xmlMalloc 是动态分配内存的函数; xmlFree 是配套的释放内 存函数; xmlStrcmp 是字符串比较函数等等。基本上 xmlChar 字符串相关函数 都在xmlstring.h 中定义;而动态内存分配函数在 xmlmemory.h 中定义。另外要 注意,因为总是要在 xmlChar* 和 char* 之间进行类型转换,所以定义了一个宏 BAD_CAST ,其定义如下: xmlstring.h

#define BAD_CAST (xmlChar *)

数据结构

xmlDoc
代表DOM结构中的文档类型。包含由解析文档建立的树结构, xmlDocPtr 是指向这个结构的指针。
xmlNode

代表DOM结构中的除文档类型类型外的其它节点类型。包含单一结点 的结构, xmlNodePtr 是指向这个结构的指针,它被用于遍历文档树。节点应 该是xml中最重要的元素了, xmlNode 代表了xml文档中的一个节点,实现为一 个 struct ,内容很丰富: tree.h

http://jianlee.ylinux.org/Computer/C/libxml.html

xml 文档的操作其根本原理就是在节点之间移动、查询节点的各项信息,并进行 增加、删除、修改的操作。 xmlDocSetRootElement 函数可以将一个节点设置为 某个文档的根节点,这是将文档与节点连接起来的重要手段,当有了根结点以 后,所有子节点就可以依次连接上根节点,从而组织成为一个 xml 树。

创建一个 XML 文档流程如下:

  1. 用 xmlNewDoc 函数创建一个文档指针 doc;

  2. 用 xmlNewNode 函数创建一个节点指针 root_node;

  3. 用 xmlDocSetRootElement 将 root_node 设置为 doc 的根节点;

  4. 给 root_node 添加一系列子节点,并设置字节点的内容和属性;

  5. 用 xmlSaveFile 保存 xml 到文件;

  6. 用 xmlFreeDoc 函数关闭文档指针,清除内存。

xmlNewProp
给一个节点增加属性信息,包括在 <> 中,如:
  xmlNewProp (proot_node,BAD_CAST "版本",BAD_CAST "1.0");

最后显示是这个样子:

<根节点 版本="1.0">

xmlDocSetRootElement
设置 XML 文档对象的根节点,只有一个根节点
xmlNewChild
指定一个节点,会创建这个节点的子节点。这样不需要使用 xmlNewNode 创建一个节点,再使用 xmlAddChild 添加到其父节点中。
xmlAddChild
把一个节点设置为另外一个节点的子节点。
xmlNewText
创建一个描述节点,没有 <> 符号,需要添加到其他节点上。比 如上例中的:
  xmlAddChild (pnode1,xmlNewText (BAD_CAST "这是更低的节点,子子子节点1"));

会出现下面的结果:

    <子子节点1>这是更低的节点,子子子节点1</子子节点1>

解析 XML 文档

解析一个xml文档,从中取出想要的信息,例如节点中包含的文字,或者某个节点 的属性,其流程如下:

  • 用 xmlReadFile 函数读出一个文档指针 doc ;

  • 用 xmlDocGetRootElement 函数得到根节点 curNode ;

  • curNode->xmlChildrenNode 就是根节点的子节点集合 ;

  • 轮询子节点集合,找到所需的节点,用 xmlNodeGetContent 取出其内容 ;

  • 用 xmlHasProp 查找含有某个属性的节点 ;

  • 取出该节点的属性集合,用 xmlGetProp 取出其属性值 ;

  • 用 xmlFreeDoc 函数关闭文档指针,并清除本文档中所有节点动态申请的内存。

注意: 节点列表的指针依然是 xmlNodePtr ,属性列表的指针也是 xmlAttrPtr ,并没有 xmlNodeList 或者 xmlAttrList 这样的类型 。看作列表的时候使用它 们的 next 和 prev 链表指针来进行轮询 。只有在 Xpath 中有 xmlNodeSet 这 种类型。

路径表达式 结果
/bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<3] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang='eng'] 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00] 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。
路径表达式 结果
/bookstore/* 选取 bookstore 元素的所有子元素。
//* 选取文档中的所有元素。
//title[@*] 选取所有带有属性的 title 元素。

//BBB[@id]

<AAA>
<BBB id = "b1"/>
id = "b2"
BBB name = "bbb"BBB </>


XML转义字符

&lt;

<


小于号

&gt;

>


大于号

&amp;

&

&apos;

'

单引号

&quot;

"

双引号


参考

http://www.w3school.com.cn/xpath/

http://www.zvon.org/xxl/XPathTutorial/Output_chi/example5.html

http://www.52php.cn/article/p-aiaawlne-bra.html

http://www.blogjava.net/wxb_nudt/archive/2007/11/28/161340.html


//BBB选择所有BBB元素

//BBB[@id]:选择有"id"属性的BBB元素

xmlDocGetRootElement(doc):取得文档根元素

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读