2015-12-17 69 views
2

這裏是我的問題:Pugixml 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_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; 
} 
+3

我希望所有的賭注都關閉,因爲你有一個無效的XML文件。 – immibis

+0

@immibis XML文件有效。 這裏是我的代碼,打開XML文件: 框架:: XML配置; config.open(「test.xml」); –

+1

您問題中顯示的XML無效。需要有一個封閉的標籤。 – Galik

回答

3

要轉換爲字符串( 「真」),以使用XPath布爾值。如果字符串的長度不爲零,則返回true。

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

您可以在XPath表達式文本as_bool(比較字符串爲 「true」 來解決這個問題,或者使用evaluate_node(* PTR).node()()。)而不是evaluate_boolean( * PTR)。