示例#1
0
文件: xml.cpp 项目: 2202877/acl
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;
}
示例#2
0
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);
}