XMLResourceNode XMLResourceDocument::get_resource(
	const std::string &resource_id) const
{
	XMLResourceNode node = impl->get_resource(resource_id);
	if (node.is_null())
		throw Exception(string_format("Resource not found: %1", resource_id));
	return node;
}
XMLResourceNode XMLResourceDocument_Impl::get_resource(const std::string &resource_id) const
{
 	std::map<std::string, XMLResourceNode>::const_iterator it;
	it = resources.find(resource_id);
	if (it != resources.end())
		return it->second;

	std::vector<XMLResourceDocument>::size_type i;
	for (i = 0; i < additional_resources.size(); i++)
	{
		XMLResourceNode node = additional_resources[i].impl->get_resource(resource_id);
		if (!node.is_null())
			return node;
	}

	return XMLResourceNode();
}