2017-07-11 30 views
1

我有這樣的XMLpugi :: NEXT_SIBLING返回一些奇怪

<w:document> 
<w:body> 
    <w:p> 
     <abra-cadabra> 
      <w:t>test</w:t> 
     </abra-cadabra> 
    </w:p> 
    <w:p> 
    </w:p> 
    <w:p> 
     <w:t>test1</w:t> 
    </w:p> 
</w:body> 

我用pugixml到parce它。

pugi::xml_node cur_sibling = cur_node.next_sibling(); 
    if (cur_sibling.name() == "") 
     find_sibling(cur_node.parent()); 

這裏cur_node是測試節點,next_subling結構是這樣的: cur_sibling 對不起俄羅斯,它最高審計機關無法讀取內存 ,所以我不能用它做任何事情,並試圖把它的名字的原因堆棧電流錯誤。不知道發生了什麼,爲什麼它沒有返回空節點?

回答

0

您的測試節點不具有NEXT_SIBLINGcur_sibling然後無效xml_node,你可以測試:

if (!cur_sibling) 

如果你看一下成員函數的簽名:

const char_t* xml_node::name() const 

你可以看到它沒有返回一個字符串,而是一個const char_t*。然後,您與運營商==比較(不同)地址。

+0

謝謝!它似乎運作良好,但你能解釋我這一點:據我瞭解的文件,當節點是最後一個孩子next_subling返回空節點,這是一個空字符串的名稱。雖然,我曾經使用過相同的結構,並且按照我的預期工作。 但這次不行。我錯過了什麼? –

+0

@Stupid_Hedgehog的確,它[返回一個空字符串](https://github.com/zeux/pugixml/blob/master/src/pugixml.cpp#L5455)我期待一個斷言。問題是你的比較。見編輯的答案。 –

+0

@Stupid_Hedgehog你不能比較'char *'與運算符==,你必須使用['strcmp'](http://en.cppreference.com/w/cpp/string/byte/strcmp)。 –