这是我的问题:
test.xml
<?xml version="1.0" encoding="UTF-8"?>
<server>
<a>true</a>
<b>false</b>
</server>
test.cpp
sampgdk::logprintf("%d", config.get<bool>("server/a"));
sampgdk::logprintf("%d", config.get<bool>("server/b"));
结果:
1
1
结果应该是1和0,对吗?但在这两种情况下,我总是得到1。它只发生在evaluate_toolean()上。evaluate_number()和evaluate_string()工作得很好。
这是我的config.get
template<> bool framework::xml::get(std::string xpath) {
if (is_open) {
try {
return pugi::xpath_query(xpath.data()).evaluate_boolean(*ptr);
}
catch (std::exception &e) {
sampgdk::logprintf("XML exception: %sn", e.what());
}
}
return false;
}
您正在使用XPath将字符串("true")转换为布尔值。如果字符串的长度为非零,则返回true。
http://www.w3.org/TR/xpath/#section-布尔函数
您可以将字符串与XPath表达式中的"true"进行比较以解决此问题,或者使用evaluate_node(*ptr).node().text().as_tool()而不是evaluate_oolean(*ptr)。