最近在写一个音乐播放器的小程序,在调用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>
------解决方案--------------------
这么写可以支持带属性的
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();
}