0

私は大学のためにいくつかのことをしてきました

いくつかのものを保存する必要があり、そのために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 のどこに問題がありますか?

よろしくお願いします

4

2 に答える 2

2

問題は次のとおりです。<0 number="1" ingredient="NULL" />

タグ名として番号を使用することはできません。

于 2016-11-05T13:35:45.017 に答える
1

私の問題を解決してくれてありがとう:D

" 0 は有効な XML 名ではありません "

良い週末を

OT: ここが新しい ... 質問に「回答済み」または「完了」のマークを付けたり、クローズ リクエストを開いて、すべての順序を維持したりすることはできますか?

于 2016-11-05T13:41:08.790 に答える