【问题标题】:PugiXML empty document without errorPugiXML 空文档没有错误
【发布时间】:2013-06-23 22:01:11
【问题描述】:

我有以下 XML:

<?xml version="1.0" encoding="utf-8"?>
<jack>
    <client name="Music Player Daemon">
        <port name="left">
            <connection port="jamin:in_L" />
        </port>
        <port name="right">
            <connection port="jamin:in_R" />
        </port>
    </client>
</jack>

我正在尝试使用 PugiXML 解析它,但加载后我的文档为空,结果描述说没有错误:

pugi::xml_document doc;
pugi::xml_parse_result result = doc.load("/location/filename.xml");
std::cout << "Load result: " << result.description() << std::endl;

但这是一个空文档:

std::size_t numitens = std::distance(doc.begin(), doc.end());
std::cout << numitens << std::endl;

输出:

Load result: No error
0

我认为 XML 没有问题,对吧?

XML 是由其他应用程序生成的,所以我无法更改,如果 XML 有问题我需要更改 XML 解析器吗? TinyXML 还是 libxml++?

【问题讨论】:

    标签: c++ xml xml-parsing pugixml


    【解决方案1】:

    doc.load() 加载字符串,而不是文件。你必须使用doc.load_file()

    理想情况下,字符串“/location/filename.xml”的解析应该失败;原因很复杂,主要与向后兼容性有关。

    【讨论】:

    • 谢谢,现在xml加载成功,可以doc.child("jack");但是 doc.root() 不是 'jack' 为什么?
    • doc.root() 是 doc 的同义词;该成员实际上是 xml_node 的成员,因此不打算在 xml_document 中使用。您正在寻找 doc.document_element()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 2012-08-22
    • 2014-07-18
    • 2020-08-16
    • 2018-10-11
    • 2015-03-18
    • 1970-01-01
    相关资源
    最近更新 更多