0%

boost 解析XML文件,获取子节点的属性值

考虑以下的Wikipedia API返回的XML查询值信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <query>
<pages>
<page pageid="135739" ns="0" title="首页">
<links>
<pl ns="0" title="MediaWiki"/>
<pl ns="0" title="中国大陆"/>
<pl ns="0" title="中文维基百科"/>
<pl ns="0" title="副檔名"/>
<pl ns="0" title="域名"/>
<pl ns="0" title="文件"/>
<pl ns="0" title="文档"/>
<pl ns="0" title="服务器"/>
<pl ns="0" title="浏览器"/>
<pl ns="0" title="網頁瀏覽器"/>
<pl ns="0" title="网站"/>
<pl ns="0" title="网络浏览器"/>
<pl ns="0" title="网页"/>
<pl ns="0" title="電腦"/>
</links>
</page>
</pages>
</query>
</api>

假如我们需要获取api.query.pages.page.links中各个子节点pl的title属性值,可以通过以下方法

1
2
3
4
5
6
7
read_xml("respond.xml",pt);
BOOST_AUTO(child,pt.get_child("api.query.pages.page.links"));
for(BOOST_AUTO(pos,child.begin());pos!=child.end();++pos)
{
cout<<pos->second.get<string>("<xmlattr>.title")<<endl;
++cnt;
}