Puixml C++解析布尔值



这是我的问题:

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)。

相关内容

  • 没有找到相关文章

最新更新