xml_node& xml2_node::add_child(xml_node* child, bool return_child /* = false */) { ACL_XML2_NODE* node = ((xml2_node*) child)->get_xml_node(); acl_xml2_node_add_child(node_, node); child->set_parent(this); if (return_child) return *child; return *this; }
static const char *xml_parse_right_lt(ACL_XML2 *xml, const char *data) { ACL_XML2_NODE *node; SKIP_SPACE(data); if (*data == 0) return data; if (*data == '/') { /* get: "</" */ data++; xml->curr_node->status = ACL_XML2_S_RTAG; return data; } else if ((xml->curr_node->flag & ACL_XML2_F_LEAF)) { /* XXX: some error ? */ if (NO_SPACE(xml)) return data; ADD(xml, '<'); if (NO_SPACE(xml)) return data; ADD(xml, *data); data++; xml->curr_node->status = ACL_XML2_S_TXT; return data; } /* 说明遇到了当前节点的子节点 */ /* 重新设置当前节点状态,以便于其被子节点弹出时可以找到 "</" */ xml->curr_node->status = ACL_XML2_S_TXT; /* 创建新的子节点,并将其加入至当前节点的子节点集合中 */ node = acl_xml2_node_alloc(xml); acl_xml2_node_add_child(xml->curr_node, node); node->depth = xml->curr_node->depth + 1; if (node->depth > xml->depth) xml->depth = node->depth; xml->curr_node = node; xml->curr_node->status = ACL_XML2_S_LLT; return data; }