2016-11-05 45 views
-1

香港專業教育學院一直致力於一個一些東西對大學TinyXML的斜面加載我的文件

是爲了節省一些東西,我選擇了TinyXML的這樣做

TiXmlDocument doc; 
TiXmlDeclaration* decl = new TiXmlDeclaration("1.0", "", ""); 
doc.LinkEndChild(decl); 
TiXmlElement* cm = new TiXmlElement("CocktailMachine"); 
doc.LinkEndChild(cm); 

TiXmlElement* disp = new TiXmlElement("dispensers"); 
cm->LinkEndChild(disp); 
TiXmlElement* cock = new TiXmlElement("cocktails"); 
cm->LinkEndChild(cock); 
TiXmlElement* ingr = new TiXmlElement("ingredients"); 
cm->LinkEndChild(ingr); 






for (size_t i = 0; i < dispensers.size(); i++) 
{ 
    stringstream ss; 
    ss << i; 
    string s = ss.str(); 
    TiXmlElement* x_disp = new TiXmlElement(s.c_str()); 
    disp->LinkEndChild(x_disp); 
    x_disp->SetAttribute("number", dispensers.at(i)->get_number()); 
    if (dispensers.at(i)->get_ingredient() == NULL) { 

     x_disp->SetAttribute("ingredient", "NULL"); 

    } 
    else { 


     x_disp->SetAttribute("ingredient", dispensers.at(i)->get_ingredient()->get_name().c_str()); 

    } 

} 


if (cocktails.size() != 0) 
    for (size_t i = 0; i < cocktails.size(); i++) 
    { 


     stringstream ss; 
     ss << i; 
     string s = ss.str(); 
     TiXmlElement* ct = new TiXmlElement(s.c_str()); 
     cock->LinkEndChild(ct); 
     ct->SetAttribute("name", cocktails.at(i)->get_name().c_str()); 

     for (size_t j = 0; j < cocktails.at(i)->get_ingredients().size(); j++) 
     { 

      stringstream ss; 
      ss << j; 
      string s = ss.str(); 
      TiXmlElement* ct_s = new TiXmlElement(s.c_str()); 
      ct->LinkEndChild(ct_s); 

      ct_s->SetAttribute("ingredient", cocktails.at(i)->get_ingredients().at(j)->get_name().c_str()); 
     } 

    } 



if (ingredients.size() != 0) 
    for (size_t i = 0; i < ingredients.size(); i++) 
    { 
     stringstream ss; 
     ss << i; 
     string s = ss.str(); 
     TiXmlElement* x_ingr = new TiXmlElement(s.c_str()); 
     ingr->LinkEndChild(x_ingr); 
     x_ingr->SetAttribute("name", ingredients.at(i)->get_name().c_str()); 

    } 


doc.SaveFile("CM.xml"); 
doc.Clear(); 

這樣可以節省一些東西到CM.xml

<?xml version="1.0" ?> 
 
<CocktailMachine> 
 
    <dispensers> 
 
     <0 number="1" ingredient="NULL" /> 
 
     <1 number="2" ingredient="NULL" /> 
 
     <2 number="3" ingredient="NULL" /> 
 
     <3 number="4" ingredient="NULL" /> 
 
     <4 number="5" ingredient="NULL" /> 
 
     <5 number="6" ingredient="NULL" /> 
 
    </dispensers> 
 
    <cocktails> 
 
     <0 name="Tequila Sunrise"> 
 
      <0 ingredient="Tequila" /> 
 
      <1 ingredient="Orange juice" /> 
 
      <2 ingredient="Grenadine" /> 
 
     </0> 
 
     <1 name="tq2"> 
 
      <0 ingredient="Tequila" /> 
 
      <1 ingredient="Orange juice" /> 
 
      <2 ingredient="Grenadine" /> 
 
     </1> 
 
    </cocktails> 
 
    <ingredients /> 
 
</CocktailMachine>
(不代碼我知道,但是這是張貼XML的唯一途徑)

當我嘗試用這種

TiXmlDocument* doc = new TiXmlDocument("example1.xml"); 
if (!doc->LoadFile()) 
    cout << "false"; 

它始終返回false

試圖加載 「helloworld.xml」 加載它工作正常

<?xml version="1.0" ?> 
 
<Hello>World</Hello>

所以我的XML的問題在哪裏?

在此先感謝 Jonny0815

+1

「0」不是有效的XML名稱,因此您的文本不是格式良好的XML文檔。 –

回答

1

這裏的問題:<0 number="1" ingredient="NULL" />

你不能有一個數字作爲標籤名稱。

0

非常感謝解決我的問題球員:d

「0不是一個有效的XML名稱」

有一個美好的週末

OT:新來的......我可以標記爲問題「回答」或「完成」或打開一個關閉請求,因此每個人都保持有序?