2014-10-31 67 views
1

如果我有XML内容如何获得内部节点值

<aaa> 1111<bbb>222</bbb>333 </aaa> 

,那么如何才能获得价值,这是“1111”和“333”

,但我只能得到第一个节点的值,它是“1111” 只是

请告知

代码是在这里

#include <iostream> 
#include "rapidxml/rapidxml.hpp" 
#include <string.h> 

using namespace std; 
using namespace rapidxml; 

string content = "<aaa> 1112<bbb>222</bbb>333 </aaa>"; 

int main(int argc, char**argv) { 


    xml_document<> m_doc; 

    try { 

     m_doc.parse<0>(&content[0]); 

    } catch (rapidxml::parse_error &error) { 
     cout <<"parse_error\n"; 
     exit(1); 

    } 

    xml_node<>* node = m_doc.first_node(); 
    cout << "name = " <<node->name()<<endl; 
    cout << "value = "<< node->value() <<endl; 
    cout << "value_size = "<< node->value_size()<<endl; 

    m_doc.clear(); 

    return 0; 
} 

输出是

name = aaa 
value = 1111 
value_size = 5 
+0

之前从未使用过该库,但有些东西告诉我应该通过使用'xml_node :: next_sibling'在节点列表上循环来获得所需的内容(请参阅教程http://rapidxml.sourceforge.net/manual.html# classrapidxml_1_1xml__node)。 – didierc 2014-10-31 06:49:29

+0

@didierc使用next_sibling,将获得NULL点回来,因为没有兄弟节点 – Denny 2014-11-03 09:41:43

回答

0

使用NEXT_SIBLING功能找到同一节点下的下一个字符串。 Xerces库使用相同的节点来查找下一个字符串。

+0

使用next_sibling,将获得NULL点回来,因为没有兄弟节点 – Denny 2014-11-03 09:42:07

+0

DOMNode * domNodeP = GetDOMElement() - > getFirstChild(); (domNodeP!= NULL && domNodeP-> getNodeType()!= DOMNode :: ELEMENT_NODE){ domNodeP = domNodeP-> getNextSibling(); } 我用上面的代码对于Xerces,找到任何节点下的下一个兄弟一样 XYZ LMN 这回我LMN。 我想你应该也尝试相同的获得第一个孩子,然后遍历节点找到下一个兄弟(文本) – user1428361 2014-11-10 07:01:15

0

好问题:我最初会误读你想分析的XML结构。

我没有试过,但我认为一旦你找到的第一个节点<aaa>必须再拿到第一个子节点(它应该有node_data类型,值1111在你的例子),而不是获得node_element的值。

然后遍历所有它的同胞寻找类型为node_data的其他节点。