マルチバイトであればタグが日本語でも動作するが、Unicodeの場合タグが英語でなければ取得できない。
#include <iostream> #include <string> #include "pugixml.hpp"
const char* data() { return R"( <?xml version="1.0" encoding="Shift-JIS"?> <data date="2022-06-15"> <名前> <a>田中</a> <b>中山</b> <c>山本</c> </名前> </data> )"; }
int main() { pugi::xml_document doc; std::string txt = data(); pugi::xml_parse_result result = doc.load_buffer(txt.data(), txt.size(), 0,pugi::xml_encoding::encoding_auto); std::cout << doc.child("data").attribute("date").value() << std::endl; for (auto point : doc.child("data").children("名前")) { std::cout << point.name() << std::endl; for (auto val : point.children()) { std::cout << val.name() << " : " << val.child_value() << std::endl; } } }
#include <iostream> #include <string> #include "pugixml.hpp"
const char* data() { return u8R"( <?xml version="1.0" encoding="UTF-8"?> <data date="2022-06-15"> <names> <a>田中</a> <b>中山</b> <c>山本</c> </names> </data> )"; }
int main() { std::wcout.imbue(std::locale("")); pugi::xml_document doc; pugi::xml_parse_result result = doc.load_string(data()); std::cout << doc.child("data").attribute("date").value() << std::endl; for (auto point : doc.child("data").children("names")) { std::cout << point.name() << std::endl; for (auto val : point.children()) { std::wcout << pugi::as_wide(val.name()) << " : " << pugi::as_wide(val.child_value()) << std::endl; } } }