【问题标题】:Pugixml C++ Parsing booleanPugixml C++ 解析布尔值
【发布时间】:2015-12-17 01:40:15
【问题描述】:

这是我的问题:

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_boolean().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: %s\n", e.what());
    }
}
    return false;
}

【问题讨论】:

  • 我希望所有的赌注都被取消,因为您的 XML 文件无效。
  • @immibis XML 文件有效。这是我打开 xml 文件的代码:framework::xml config; config.open("test.xml");
  • 您的问题中显示的 XML 无效。需要有一个单独的封闭标签。
  • @RaefaldhiAmartya XML 不能只是标签列表,必须有一个标签包含所有其他标签。例如。 &lt;mydata&gt;&lt;a&gt;true&lt;/a&gt;&lt;b&gt;false&lt;/b&gt;&lt;/mydata&gt;。只有一个&lt;mydata /&gt; 标记围绕所有其他标记。
  • TBH 我认为这可能是 pugixml 中的一个错误,尝试了数字和零长度字符串,结果相同。

标签: c++ pugixml


【解决方案1】:

您正在使用 XPath 将字符串 ("true") 转换为布尔值。如果字符串的长度不为零,则返回 true。

http://www.w3.org/TR/xpath/#section-Boolean-Functions

您可以将字符串与 XPath 表达式中的“true”进行比较来解决这个问题,或者使用 evaluate_node(*ptr).node().text().as_bool() 而不是 evaluate_boolean(*ptr)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    相关资源
    最近更新 更多