2014-10-31 2 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

+0

@didierc, используя next_sibling, получит NULL-точку назад, coz нет ни одного узла-брака – Denny

ответ

0

Используйте next_sibling функцию, чтобы найти следующую строку под тем же узлом. То же самое используется библиотекой Xerces, чтобы найти следующую строку под тем же узлом.

+0

, используя next_sibling, получит NULL-точку назад, coz нет узла-брата – Denny

+0

DOMNode * domNodeP = GetDOMElement() -> getFirstChild(); В то время как (domNodeP! = NULL && domNodeP-> getNodeType()! = DOMNode :: ELEMENT_NODE) ​​{ domNodeP = domNodeP-> getNextSibling(); } я использовал приведенный выше код для Xerces, чтобы найти следующий родственный под любым узлом, как АБВ Lmn и заносить меня Lmn. Я думаю, вы также должны попробовать то же самое получить первый ребенок, а затем перебрать узел, чтобы найти следующего брата (для текста) – user1428361

0

Хороший вопрос: я изначально неправильно понял структуру XML, которую вы пытаетесь проанализировать.

Я не пробовал это, но я думаю, что после того как вы нашли первый узел <aaa> вы должны затем получить узел первого ребенка (который должен иметь тип node_data, значение 1111 в вашем примере.), А не получение значение node_element.

Затем перебрать все его братья и сестры, ища другие узлы с типом node_data.