2014-10-31 66 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的其他節點。