一、XML

1. minixml官网地址 

    http://www.msweet.org/projects.php/Mini-XML

    其他解析xml开源库:tinyxml pugixml

    1)包含头文件: mxml.h

    2)编译的时候需要添加动态库: libmxml.so

  • -lmxml
  • /usr/local/lib

2. minixml安装:

  • ./configure --enable-threads=no && make
  • sudo make install

3. 新目录需要一个文件头 - 标准

<?xml version="1.0" encoding="utf-8"?>
  • version不可以省略
  • encoding可以省略

4. 使用注意事项

  • 必须有一个根元素(节点) -- (只有一个)
  • xml标签对大小写敏感
  • 标签大多成对使用, 有开始, 有结束
<date></date>
<time></time>

5. 标签中可以添加属性

<node date="17/11/2017">
属性值必须加引号

6. 标签注释

    <!-- 这是注释 -->

7. 开源库minixml的使用

(1)跟标签的对应的节点,父亲节点是:文件头节点

(2)生成xml文件

   1)创建一个新的xml文件

mxml_node_t *mxmlNewXML(const char *version);
  • 返回新创建的xml文件节点.
  • 默认的文件的编码为utf8

   2)删除节点的内存

void mxmlDelete(mxml_node_t *node);

   3)添加一个新的节点

mxml_node_t *mxmlNewElement(
    mxml_node_t *parent, // 父节点
    const char *name // 新节点标签名
);

   4)设置节点的属性名和属性值 

void mxmlElementSetAttr(
    mxml_node_t *node, // 被设置属性的节点
    const char *name, // 节点的属性名
    const char *value // 属性值
);

   5)创建节点的文本内容

mxml_node_t *mxmlNewText ( 
    mxml_node_t *parent, // 节点地址
    int whitespace, // 是否有空白 0
    const char *string // 文本内容
);

   6)保存节点到xml文件

int mxmlSaveFile(
    mxml_node_t *node, // 根节点
    FILE *fp, // 文件指针
    mxml_save_cb_t cb // 默认MXML_NO_CALLBACK
);

(3)解析xml文件

   1)从文件加载xml到内存

mxml_node_t *mxmlLoadFile(
    mxml_node_t *top, // 一般为NULL
    FILE *fp, // 文件指针
    mxml_type_t (*cb)(mxml_node_t *) // 默认
    MXML_NO_CALLBACK
);

    2)获取节点的属性

const char *mxmlElementGetAttr(
    mxml_node_t *node, // 带属性的节点的地址
    const char *name // 属性名
);

   3)获取指定节点的文本内容

const char *mxmlGetText(
    mxml_node_t *node, // 节点的地址
    int *whitespace // 是否有空格
);

   4)跳转到下一个节点

mxml_node_t *mxmlWalkNext(
mxml_node_t *node, // 当前节点
mxml_node_t *top, // 根节点
int descend
);

descend:搜索的规则
         MXML_NO_DESCEND:查看同层级
         MXML_DESCEND_FIRST:查看下一层级的第一个
         MXML_DESCEND:一直向下搜索

   5)查找节点

mxml_node_t *mxmlFindElement(
     mxml_node_t *node, // 当前节点
     mxml_node_t *top, // 根节点
     const char *name, // 查找的标签名
     const char *attr, // 查找的标签的属性,没有属性传NULL
     const char *value, // 查找的标签的属性值,没有属性传NULL
     int descend // 同上 
);

8. 示例

(1)生成下面的xml

1 <?xml version="1.0" encoding="utf-8"?>
2 <bookstore>
3     <book category="儿童">
4         <title>哈利波特</title>
5         <autoro>JK.Rowling</autoro>
6         <year>2005</year>
7         <price>29.99</price>
8     </book>
9 </bookstore>
create_xml.xml

相关文章:

  • 2021-11-18
  • 2022-12-23
  • 2018-05-11
  • 2021-12-14
  • 2022-01-04
  • 2022-12-23
  • 2022-02-20
猜你喜欢
  • 2022-01-12
  • 2021-12-06
  • 2021-11-02
  • 2021-07-24
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案