2012-12-16 42 views
0

我試圖用一些簡單的C++擁有像解析XML和文件轉儲每個<>阻止

<mgrwt event="1"> 
    ... 
    ... 
    ... 
    </mgrwt> 

<mgrwt event="2"> 
    ... 
    ... 
    ... 
</mgrwt> 

塊現在,我有一個bash腳本作用於每個塊的解析XML - 所以, ,我的問題是,我怎麼可以循環內部的XML(我不需要RapidXML或類似的東西),以便輕鬆轉儲到每個塊的小臨時文件?

我的解析器看起來像

bool begin_tag = false; 
    while (getline(in,line)) 
    { 
     std::string tmp; 
     tmp=line; 
     if(line.find("<mgrwt event=")<=line.size()){ 
      cout<<line<<endl; 
      begin_tag = true; 
      continue; 
     } 
     else if (tmp == "</mgrwt>") 
     { 
      begin_tag = false; 

     } 

    } 
} 

感謝

亞歷

+0

哪裏有'tmp'分配? –

+0

是的,實際上tmp = line;謝謝 – Alex

+1

如果文件是XML文件,我會建議使用XML解析器。其他任何事情最終都會造成問題。如果你真的打算**不使用XML解析器,那麼使用不同的文件格式怎麼樣?大多數腳本/編程語言都可以通過簡單的基於行的參數文件或CSV工作。 –

回答

0

我會建議使用XML解析器讀取XML文件。結賬expat,POCO XML或其他庫。

如果你不能不管出於什麼原因,和你常讀的東西看起來完全一樣,沒有其他格式的變化你的樣品中,也應該使用find()檢測塊的結尾:

else if(line.find("</mgrwt>")<=line.size()) 
{ 
    begin_tag = false; 
} 
+0

嗨...實際上XML不是我的選擇......所以,實際上,問題是如何打印參數之間的界限,使用C++ .... – Alex