我正在开发一个C ++(visual studio 2005)应用,它使用json
和rapidxml
库将rapidjson
转换为<?xml version="1.0"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications with XML.</description>
</book>
</catalog>
我。 / p>
XML
{
"catalog": {
"book": {
"-id": "bk101",
"author": "Gambardella, Matthew",
"title": "XML Developer's Guide",
"genre": "Computer",
"price": "44.95",
"publish_date": "2000-10-01",
"description": "An in-depth look at creating applications with XML."
}
}
}
Json :
{"catalog":{}}
我得到了这个
std::string xml2json(const char *xml_str)
{
std::cout<<xml_str;
rapidxml::xml_document<> *xml_doc = new rapidxml::xml_document<>();
xml_doc->parse<0> (const_cast<char *>(xml_str));
rapidjson::Document js_doc;
js_doc.SetObject();
rapidjson::Document::AllocatorType& allocator = js_doc.GetAllocator();
rapidxml::xml_node<> *xmlnode_chd;
for(xmlnode_chd = xml_doc->first_node()->first_node(); xmlnode_chd; xmlnode_chd = xmlnode_chd->next_sibling())
{
rapidjson::Value jsvalue_chd;
jsvalue_chd.SetObject();
rapidjson::Value jsvalue_name(xmlnode_chd->name(), allocator);
js_doc.AddMember(jsvalue_name, jsvalue_chd, allocator);
}
delete xml_doc;
rapidjson::StringBuffer buffer;
buffer.Clear();
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
js_doc.Accept(writer);
return buffer.GetString();
}
如何让我的代码解析XML树中的所有实体。
我认为我的问题来自代码的这一部分:
C ++ :
{{1}}
答案 0 :(得分:0)
您遍历根节点的所有兄弟节点,但您永远不会处理他们的孩子。您需要使用遍历树的每个级别的算法。递归的将是传统的选择。