xml_node& xml_node::add_child(xml_node* child, bool return_child /* = false */) { ACL_XML_NODE* node = child->get_xml_node(); acl_xml_node_add_child(node_, node); child->parent_ = this; if (return_child) return *child; return *this; }
static const char *xml_parse_right_lt(ACL_XML *xml, const char *data) { ACL_XML_NODE *node; SKIP_SPACE(data); if (*data == 0) return (NULL); if (*data == '/') { xml->curr_node->status = ACL_XML_S_RTAG; data++; return (data); } else if ((xml->curr_node->flag & ACL_XML_F_LEAF)) { ACL_VSTRING_ADDCH(xml->curr_node->text, '<'); ACL_VSTRING_ADDCH(xml->curr_node->text, *data); ACL_VSTRING_TERMINATE(xml->curr_node->text); xml->curr_node->status = ACL_XML_S_TXT; data++; return (data); } /* 说明遇到了当前结点的子结点 */ /* 重新设置当前结点状态,以便于其可以找到 "</" */ xml->curr_node->status = ACL_XML_S_TXT; /* 创建新的子结点,并将其加入至当前结点的子结点集合中 */ node = acl_xml_node_alloc(xml); acl_xml_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_XML_S_LLT; return (data); }