2013-01-25 47 views
1

我使用XMLReader轉換的xmlString NSDictionary中,它工作正常的一些XML的string.But它給空字典XML低於XML不解析到NSDictionary?

<?xml version=\"1.0\"?> 
<THEME> 
    <OBJ> 
     <FORMBG>0x00E0E0E0</FORMBG> 
     <ALERTBG>0x00B4B4B4</ALERTBG> 
     <FORMFONT>0x0033001A</FORMFONT> 
     <FORMFONT2>0x00575757</FORMFONT2> 
     <FORMFONT3>0x003E3E37</FORMFONT3> 
     <ROWSELECTORLIST>0x0000CC33</ROWSELECTORLIST> 
     <ROWDIVIDER>0x00BBBBBB</ROWDIVIDER> 
     <SUBHEADER>0x00A8A8A8</SUBHEADER> 
     <SELECTORCOMPONENT>0x00C2C2C2</SELECTORCOMPONENT> 
     <FOOTER>0x00796767</FOOTER> 
    </OBJ> 
</THEME> 

我轉換的代碼顯示如下:

NSString *stringURL=[NSString stringWithFormat:@"http://202.58.232.138/mt/theme.aspx"]; 
NSURL *url=[NSURL URLWithString:stringURL]; 

NSMutableURLRequest *request=[[NSMutableURLRequest alloc] initWithURL:url]; 
NSError *error; 
NSURLResponse *response; 
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

NSString *responseString=[[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding]; 
NSLog(@"response string is %@",responseString); 

NSDictionary *dictionary=[XMLReader dictionaryForXMLString:responseString error:nil]; 

URL被打印以下數據上的瀏覽器

0x00E0E0E00x00B4B4B40x0033001A0x005757570x003E3E370x0000CC330x00BBBBBB0x00A8A8A80x00C2C2C2 
0x00796767 

和印花xcode的日誌將顯示以下數據。

<?xml version=\"1.0\"?> 
<THEME> 
    <OBJ> 
     <FORMBG>0x00E0E0E0</FORMBG> 
     <ALERTBG>0x00B4B4B4</ALERTBG> 
     <FORMFONT>0x0033001A</FORMFONT> 
     <FORMFONT2>0x00575757</FORMFONT2> 
     <FORMFONT3>0x003E3E37</FORMFONT3> 
     <ROWSELECTORLIST>0x0000CC33</ROWSELECTORLIST> 
     <ROWDIVIDER>0x00BBBBBB</ROWDIVIDER> 
     <SUBHEADER>0x00A8A8A8</SUBHEADER> 
     <SELECTORCOMPONENT>0x00C2C2C2</SELECTORCOMPONENT> 
     <FOOTER>0x00796767</FOOTER> 
    </OBJ> 
</THEME> 

我認爲這就是爲什麼它不轉換爲NSDictionary。 請幫忙如果你以前遇到過這樣的問題。 當您將以上XML數據傳遞給[XMLReader dictionaryForXMLString:responseString error:nil]; 在響應字符串的地方,那麼它會很好的工作。但是如果你執行上面的代碼,它會顯示dictionary =(null)。

在此先感謝!

+0

如果你替換NSDictionary * dics = [XMLReader dictionaryForXMLData:urlData error:nil],你會在錯誤參數中得到什麼?與NSError *錯誤=零; NSDictionary * dics = [XMLReader dictionaryForXMLData:urlData錯誤:&錯誤]; NSLog(@「error:%@」,[error localizedDescription]);你的錯誤應該在那裏。 – Vlad

+0

錯誤是(null) – Warewolf

回答

3

終於找到了錯誤:

它計數轉義序列響應string.That的,爲什麼不解析來的NSDictionary。 我已經添加了下面的行來用空白替換轉義序列。

NSString *responseString=[[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding]; 
responseString=[responseString stringByReplacingOccurrencesOfString:@"\\" withString:@""]; 

現在我的代碼運行完美。解析後輸出如下所示。

xml dictianary is { 
THEME =  { 
    OBJ =   { 
     ALERTBG =    { 
      text = 0x00B4B4B4; 
     }; 
     FOOTER =    { 
      text = 0x00796767; 
     }; 
     FORMBG =    { 
      text = 0x00E0E0E0; 
     }; 
     FORMFONT =    { 
      text = 0x0033001A; 
     }; 
     FORMFONT2 =    { 
      text = 0x00575757; 
     }; 
     FORMFONT3 =    { 
      text = 0x003E3E37; 
     }; 
     ROWDIVIDER =    { 
      text = 0x00BBBBBB; 
     }; 
     ROWSELECTORLIST =    { 
      text = 0x0000CC33; 
     }; 
     SELECTORCOMPONENT =    { 
      text = 0x00C2C2C2; 
     }; 
     SUBHEADER =    { 
      text = 0x00A8A8A8; 
     }; 
    }; 
}; 
} 
0

我猜字典沒有初始化。

您應該初始化NSDictionary * dics。

+0

其他xmlStrings正在轉換成功。 – Warewolf

0

你嘗試把分配

NSDictionary *dics=[XMLReader dictionaryForXMLData:urlData error:nil]; 

在異步請求的回調?它對我來說非常合適。

我在想,也許在第一個地方下載xml可能會有問題,但是你不檢查。