繁体   English   中英

使用C ++解析Xml文件

[英]Parse Xml File with C++

我的问题是我有一个很大的xml文件,必须在C ++中解析。 文件是b.xml,我必须从每个标签中获取消息子标签。 我的第一部分问题是: https : //stackoverflow.com/questions/27977851/parsing-xml-file-with-boost-c/27978152#27978152

<MultiMessage>
    <Message structID="1710" msgID="0" length="50">
        <structure type="AppHeader">
        </structure>
    </Message>
    <Message structID="27057" msgID="27266" length="315">
        <structure type="Container">
            <productID value="166"/>
            <publishTo value="xyz"/>
            <templateID value="97845"/>
            <sendingTime value="1421320622367060444"/>
            <message value="092374NMKLA90U345N09832LJKN0A9845JHKLASDF09U8426LJAKLJDGF09845U6KLJSDGP89U45LJSDFP9GU4569078LJK"/>
        </structure>
    </Message>
</MultiMessage>
<MultiMessage>
    <Message structID="1710" msgID="0" length="50">
        <structure type="AppHeader">
        </structure>
    </Message>
    <Message structID="27057" msgID="27266" length="315">
        <structure type="Container">
            <productID value="166"/>
            <publishTo value="xyz"/>
            <templateID value="97845"/>
            <sendingTime value="1421320622367060444"/>
            <message value="092374NMKLA90U345N09832LJKN0A9845JHKLASDF09U8426LJAKLJDGF09845U6KLJSDGP89U45LJSDFP9GU4569078LJK"/>
        </structure>
    </Message>
</MultiMessage>
<MultiMessage>
    <Message structID="1710" msgID="0" length="50">
        <structure type="AppHeader">
        </structure>
    </Message>
    <Message structID="27057" msgID="27266" length="315">
        <structure type="Container">
            <productID value="166"/>
            <publishTo value="xyz"/>
            <templateID value="97845"/>
            <sendingTime value="1421320622367060444"/>
            <message value="092374NMKLA90U345N09832LJKN0A9845JHKLASDF09U8426LJAKLJDGF09845U6KLJSDGP89U45LJSDFP9GU4569078LJK"/>
        </structure>
    </Message>
</MultiMessage>

输出应为:

092374NMKLA90U345N09832LJKN0A9845JHKLASDF09U8426LJAKLJDGF09845U6KLJSDGP89U45LJSDFP9GU4569078LJK
092374NMKLA90U345N09832LJKN0A9845JHKLASDF09U8426LJAKLJDGF09845U6KLJSDGP89U45LJSDFP9GU4569078LJK
092374NMKLA90U345N09832LJKN0A9845JHKLASDF09U8426LJAKLJDGF09845U6KLJSDGP89U45LJSDFP9GU4569078LJK

谢谢

问候

我建议您使用XML解析器对此进行解析。 根据我的经验,在属性树上执行这种查询是很麻烦的。

如果您使用XPath,则只需在一行中完成所需的操作即可。 例如,使用PugiXML¹:

#include <pugixml.hpp>
#include <iostream>

int main() {
    pugi::xml_document doc;
    doc.load_file("input.xml");

    for (auto& n : doc.select_nodes("//root/MultiMessage/Message/structure/message/@value"))
        std::cout << n.attribute().value() << "\n";
}

版画

092374nmkla90u345n09832ljkn0a9845jhklasdf09u8426ljakljdgf09845u6kljsdgp89u45ljsdfp9gu4569078ljk
092374nmkla90u345n09832ljkn0a9845jhklasdf09u8426ljakljdgf09845u6kljsdgp89u45ljsdfp9gu4569078ljk
092374nmkla90u345n09832ljkn0a9845jhklasdf09u8426ljakljdgf09845u6kljsdgp89u45ljsdfp9gu4569078ljk

或者,使用外部工具,例如xmlstarletxmllint --xpath

¹可以仅用于标头,例如boost属性树

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM