2016-03-17 2 views
0

Je développe un C++ (visual studio 2005) app qui convertit xml à json J'utilise rapidxml et rapidjson bibliothèques.xml à la conversion JSON C++

XML

<?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> 

Json:

{ 
    "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." 
      } 
    } 
} 

Je suis arrivé ce

{"catalog":{}} 

Que dois-je faire pour mon code Parse toutes les entités dans les arbres XML .

Je pense que mon problème vient de cette partie du code:

C++:

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(); 
} 
+0

Erreur sur la ligne 57. – YSC

+0

pourriez-vous être plus clair –

+0

@BOUKERIBesmen c'est vous qui devez être plus clair. –

Répondre

0

Vous itérer sur tous les frères et sœurs du nœud racine, mais vous ne traitez leurs enfants . Vous aurez besoin d'utiliser un algorithme qui traverse chaque niveau de l'arbre. Un récursif serait le choix conventionnel.