如何在 C++ 中使用 tinyxml2 读取 XML 元素?
How to read XML element using tinyxml2 in C++?
我正在尝试通过以下简单内容阅读 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;
它应该可以正常工作。文件已成功打开。当我测试空指针时,一切正常。但是当我尝试打印该值时,它停止工作了。
你tinyxml2::XMLDocument* config;
是指针吗?因为你写 config->LoadFile("config.xml");
.
尝试使用更简单的配置定义,如下所示:
tinyxml2::XMLDocument config;
config.LoadFile("config.xml");
如果没有错误消息,则无法确定问题出在哪里,但是您在 endl
之前缺少 std::
。配置的代码更新为值而不是指针:
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;
}
编辑: 注意我在哪里使用了点“.”以及箭头“->”!
我正在尝试通过以下简单内容阅读 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;
它应该可以正常工作。文件已成功打开。当我测试空指针时,一切正常。但是当我尝试打印该值时,它停止工作了。
你tinyxml2::XMLDocument* config;
是指针吗?因为你写 config->LoadFile("config.xml");
.
尝试使用更简单的配置定义,如下所示:
tinyxml2::XMLDocument config;
config.LoadFile("config.xml");
如果没有错误消息,则无法确定问题出在哪里,但是您在 endl
之前缺少 std::
。配置的代码更新为值而不是指针:
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;
}
编辑: 注意我在哪里使用了点“.”以及箭头“->”!