2013-12-13 16 views
3

換行符我試圖解析使用的NSXMLParser XML,但由於一些我在XML中包含換行符()我越來越不準確的分析。例如「一個真正的領導者不是一個<br>搜索器的共識<br>但是,一個共識模塑商」被解析爲「一個共識模塑商」不僅
標籤搞砸了,但也似乎在後面的逗號把它搞亂,猜測它是因爲直接在br標籤旁邊沒有空格。任何人都有如何解決這個問題的經驗?許多人Stackoverflow似乎有同樣的問題,但我一直沒能找到一個iOS的解決方案。不準確的XML解析,由於在內容

在XML中BR標籤打印出來是這樣的:

&lt;br&gt; 

這是我解析

<entry> 
<title>Quote</title> 
<content>A genuine leader is not a&lt;br&gt; 
searcher for consensus&lt;br&gt; 
but, a molder of consensus</content> 
</entry> 

的XML這是我的XML解析代碼

- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    if ([elementname isEqualToString:@"entry"]) 
    { 
     currentQuote = [[SQuote alloc] init]; 
    } 

} 

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 

    if ([elementname isEqualToString:@"content"]){ 
     currentQuote.content = currentNodeContent; 
    } 

    if ([elementname isEqualToString:@"entry"]) 
    { 
     [self.popularEntries addObject:currentQuote]; 
     currentQuote = nil; 
     currentNodeContent = nil; 
    } 
} 

編輯:

我試圖改變我的charactersFound代碼如下:

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 


    if (currentNodeContent == nil) 
     currentNodeContent = [[NSMutableString alloc] initWithCapacity: 20]; 

    [currentNodeContent appendString: [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]]; 

} 

但我仍然得到一個錯誤,指出「試圖改變一個不可改變的對象與appendString:」即使currentNodeContent是類型的NSMutableString

+0

This [related question](http://stackoverflow.com/questions/14113499/xml-parse-not-showing-elements-with-symbol-inside?rq= 1)可能值得一看。 –

+0

謝謝@DonRoby,但我仍然無法弄清楚。我改變foundCharacters代碼如果(currentNodeContent ==無) currentNodeContent = [[ALLOC的NSMutableString] initWithCapacity:20]; 否則{ [currentNodeContent appendString:[字符串stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]]; }但是我得到一個錯誤說「試圖改變一個不可改變的對象與appendString:」你知道如何解決這個問題? – bachkoi32

+0

如果您更新問題中的代碼而不是嘗試將代碼置於評論中,那將會更好。我知道xml解析非常好,所以我能夠看到這是相關的,但我不知道這種語言,所以你可能從兩個人都得到更多的幫助。 –

回答

-1

避風港沒有詳細地查看你的代碼,但你應該知道SAX解析器不承諾所有連續的代碼將作爲單個字符()調用交付。實體引用(例如<br>)是一個經典案例,其中許多/大部分解析器將在它們之前將文本作爲一個字符()調用,將實體的擴展作爲另一個進行傳遞,將文本作爲第三個進行跟隨。

它是應用程序的責任來積累來自連續的字符數據()調用,直到非字符()事件的用武之地。

(這有具有SAX事件傳遞和解析器的效率做的原因緩衝管理等,但除非你正在寫一個解析器所有你需要知道的是,前面的句子。)

任何好的SAX教程應該說明的方式來做到這一點。

(如果解析器被告知保留實體邊界,或者文檔自第一次被解析以來已經被編輯過,類似的問題可能出現在DOM中,應用程序應該準備好連續查找幾個文本節點作爲兄弟,除非已知DOM是以規範化形式存在的。)