minixml常用函数接口:均需包含头文件#include mxml.h
查找节点
mxml_node_t *mxmlFindElement(mxml_node_t *node, mxml_node_t *top,const char *name, const char *attr,const char *value, int descend);
desc:
node节点为被查找的结点
top为顶层结点
name, attrr, value为NULL时表示任意匹配; 否则为精确匹配。name :节点名 attrr:属性 value:属性值
descend:参数有三个备选项
MXML_NO_DESCEND含义是不查看任何的子节点在XML元素层次中, 仅查看同层级的节点或者父节点直到到达根节点或者top节点.
MXML_DESCEND_FIRST含义是向下搜索到一个节点的第一个匹配子节点, 但不再继续向下搜索。 你一般使用于遍历一个父节点的直接的子节点。
MXML_DESCEND含义是可以一直向下搜索.
存储模型
每个节点都有一些关联节点的指针,上(parent), 下( child), 左(prev), and 右(next) 相对应于当前节点. 如果你有一个XML文件如下所示:
<?xml version="1.0"?>
<data>
<node>val1</node>
<node>val2</node>
<node>val3</node>
<group>
<node>val4</node>
<node>val5</node>
<node>val6</node>
</group>
<node>val7</node>
<node>val8</node>
</data>
那么在内存中的文件节点树看上去如下所示:
?xml
|
data
|
node - node - node - group - node - node
| | | | | |
val1 val2 val3 | val7 val8
|
node - node - node
| | |
val4 val5 val6
这里"-“指向下一个节点,”|"指向第一个子节点。
- 实例:循环遍历
val4、val5、val6、
节点
node = mxmlFindElement(group,tree,"node",NULL,NULL,MXML_DESCEND);
while(NULL != group){
printf("%s\n",node->child->value.text.string);
group = mxmlFindElement(node,tree,"node",NULL,NULL,MXML_NO_DESCEND);
}
这里值得关注的是mxmlFindElement()
的前两个参数和最后一个参数。