0

我正在尝试阅读config.xml以下简单内容:

<?xml version="1.0" encoding="utf-8"?>
<config>
    <languages>
        <language>cs</language>
        <language>en</language>
    </languages>
    <databases>
        <database>
            <domain>localhost</domain>
            <server>localhost</server>
            <username>admin</username>
            <password>admin</password>
            <name>annmproject</name>
            <prefix>site_</prefix>
        </database>
    </databases>
</config>

我写了一些非常简单的代码来阅读第一语言:

config->LoadFile("config.xml");

if(config->ErrorID() != 0)
    return 1;

tinyxml2::XMLElement* root = config->FirstChildElement("config");
tinyxml2::XMLElement* element = root->FirstChildElement("languages");
std::cout << element->FirstChildElement("language")->GetText() << "<br>" << endl;

它应该可以正常工作。文件成功打开。当我测试空指针时,一切都很好。但是当我尝试打印该值时,它停止工作。

4

1 回答 1

0

你做tinyxml2::XMLDocument* config;了指针吗?因为你写config->LoadFile("config.xml");

尝试使用更简单的配置定义,如下所示:

tinyxml2::XMLDocument config;
config.LoadFile("config.xml");

如果不存在错误消息,则无法确定出了什么问题,但是您缺少std::before endl。将 config 的代码更新为值而不是指针:

tinyxml2::XMLElement* root = config.FirstChildElement("config");
tinyxml2::XMLElement* element = root->FirstChildElement("languages");

std::cout << element->FirstChildElement("language")->GetText() << std::endl;

带有迭代的选项 2(配置为值):

tinyxml2::XMLElement* root = config.FirstChildElement("config");
tinyxml2::XMLElement* element = root->FirstChildElement("languages");

for (tinyxml2::XMLElement* language = element->FirstChildElement(); language != NULL; language = language->NextSiblingElement())
{
    std::cout << language->GetText() << std::endl;
}

编辑:注意我在哪里使用点“。” 以及箭头“->”的位置!

于 2020-07-06T15:23:50.153 回答