当前位置: 代码迷 >> QT开发 >> Qt 中解析xml,该如何解决
  详细解决方案

Qt 中解析xml,该如何解决

热度:20   发布时间:2016-04-25 04:11:36.0
Qt 中解析xml
          最近在写一个音乐播放器的小程序,在调用webservice接口来获取播放列表时遇到点麻烦。调用webservice接口后得到一个xml类型的字符串,现在我想把这个字符串中所有的(歌曲名和歌手名)解析出来,然后存起来以便后面歌曲播放的操作。
       本人对xml不怎么了解所以请各位大神赐教,最好能写出代码,谢谢各位啦。。。。
      另外问一句用什么方式存起来比较方便,链表还是别的。。。。

<Mod_EntityMedia>
<ReturnCode>200</ReturnCode>
<ListEntityMedia>
<EntityMedia>
<MediaID>0318a383320248d3af20bebd175d2988</MediaID>
<MediaName>高!高!</MediaName>
<SingerName>张学友</SingerName>
</EntityMedia>
<EntityMedia>
<MediaID>0318a383320248d3af20bebd175d2988</MediaID>
<MediaName>复活</MediaName>
<SingerName>张学友</SingerName>
</EntityMedia>
...........      //中间都是这个模式所以省略100行
<EntityMedia>
<MediaID>0318a383320248d3af20bebd175d2988</MediaID>
<MediaName>一次一次</MediaName>
<SingerName>周华健</SingerName>
</EntityMedia>
</ListEntityMedia>
</Mod_EntityMedia>


------解决方案--------------------
引用:
引用:boost库里的property tree也可以实现,载表也比较方便,之前做的Qt项目读配置就利用到boost库
boost 那个 property_tree 只支持节点,不支持属性。


这么写可以支持带属性的

using boost::property_tree::ptree;
ptree pt;
read_xml(fileName, pt);

BOOST_FOREACH(ptree::value_type &v, pt.get_child("xx"))

if (v.first == "xx")
{
_str_xx1 = v.second.get<std::string>("<xmlattr>.xx");

BOOST_FOREACH(ptree::value_type &v2, v.second)
{
if (v2.first == "xx")
{
_str_xx2 = v2.second.get<std::string>("<xmlattr>.xx");
                                        //省略
}
}
}
}

------解决方案--------------------

//appendData是指读出来的xml字符串
void loadAppendData(QString appendData)
{
    QDomDocument doc;
    if(!doc.setContent(appendData.toUtf8()))
    {
        return;
    }

    QDomElement domEle = doc.documentElement();
    QDomNode domNode = domEle.firstChild();

    while(!domNode.isNull())
    {
        if(domNode.isElement())
        {
            QDomElement e = domNode.toElement();
            //在这里处理你的节点
            if(e.tagName()=="你的节点1")
            {
                QString text1 = e.text();
            }
  相关解决方案