2012-12-28 73 views
1

我從服務中以xml的形式接收響應,我使用nsxmlparser解析該服務。 。 在我接收到的XML,其中內容是在兩個標籤相同的實例(重複項如以下XML)CData未被NSXmlparser解析

的Xml接收:

<UserGeneratedContentItem> 
    <link 
     rel="details" 
     uri="http://api.test.no/test.Ugc/vivo/usergeneratedcontentitem/16046" /> 
    <Data><![CDATA[<Type>Note</Type><Description>**6000 characters**</Description><Page>6</Page><ChapterNumber>1</ChapterNumber><ChapterTitle>Etikk og filosofi</ChapterTitle><Uri>http://api.test.no/test.Ugc/vivo/usergeneratedcontentitem/6</Uri><Data><StickyNotes><StickyNote name="icon_2" X="215.8" Y="352.7" note="**6000 characters**" dateTime="null" popupX="940" popupY="119" popupWidth="300" popupHeight="180" formatedDate ="2012-12-28-18-20-47" iconImage="1003"/></StickyNotes></Data>]]></Data> 
    </UserGeneratedContentItem> 
    <UserGeneratedContentItem> 
    <link 
     rel="details" 
     uri="http://api.test.no/test.Ugc/vivo/usergeneratedcontentitem/16046" /> 
    <Data><![CDATA[<Type>Note</Type><Description>**6000 characters**</Description><Page>6</Page><ChapterNumber>1</ChapterNumber><ChapterTitle>Etikk og filosofi</ChapterTitle><Uri>http://api.test.no/test.Ugc/vivo/usergeneratedcontentitem/6</Uri><Data><StickyNotes><StickyNote name="icon_2" X="215.8" Y="352.7" note="**6000 characters**" dateTime="null" popupX="940" popupY="119" popupWidth="300" popupHeight="180" formatedDate ="2012-12-28-18-20-47" iconImage="1003"/></StickyNotes></Data>]]></Data> 
    </UserGeneratedContentItem> 

6000字符包括字母,arithmatic &一般標點符號其將被編碼。

習題:

在 - (無效)解析器:(的NSXMLParser *)解析器foundCDATA:(NSData的*)CDATABlock 方法含量在CDATABlock變量不是在兩種情況下相同的(兩個標籤)。在一個它給我所有的6000個字符,而在另一個例子中,它只給我提供了大約300個字符。在兩種情況下,我確認的文本(6000個字符)是相同的。

可能是什麼原因?有人可以幫助我,可能是像我這樣的早期遇到過這樣的問題的人。

Tnx在advance.Plz讓我知道,如果有什麼不清楚或不明白。

回答

1

多數民衆贊成CDATA是 - 它不應該被解析

CDATA - (非解析)字符數據

源:http://www.w3schools.com/xml/xml_cdata.asp

PCDATA應分析


你必須保存NSData塊(可能被調用N次,所以你必須連接那些東西)和 - 在Y中我們的情況然後將結果解析爲單獨的XML

+0

非常感謝Dail-Djan的建議。我在做什麼是完全一樣的。我正在挑選CDATA的數據並形成一個xml並再次解析它。我的概率是CDATA塊中的數據是我不知道我有時候會把它附加到文本中,因爲它可能被稱爲N次。我懷疑我該如何知道CDATA迭代(第N次)的結束,以便我可以從xml和parse它會更有幫助,如果你有一個樣本其他建議也會做。再次請分享你的想法,這真的幫助了我很多。 – Dinakar

+0

更新:它發生在我的情況下,CDATA被稱爲N次,現在我已經使用了一個標誌來追加文本,並再次解析它。目前在我的迴應中,CDATA塊以結尾,當遇到我正在結束結束CDATA塊並啓動解析爲一個新的XML,這工作,只要我的迴應結束和該塊中的內容沒有文字。是否有一種方法(如委託方法),我可以在哪裏知道CDATA塊的結束,這將是具體的解決方案,而不是依賴於標誌和文本。 TNQ再次。 – Dinakar

+0

到達終點,當另一個NSXMLParser的委託方法被調用時,我猜...:/抱歉..這個調用的作用類似於'parser:foundCharacters:' –

0

只需調用以下函數以及其他NSXMLParser函數。然後它將開始照顧CDATA塊。

-(void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock 
{  
    NSString *someString = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding]; 

} 

你可以NSLog someString,它會顯示你的CDATA塊的內容。

+0

-1它有什麼幫助? :) &&這不是整個CDATA塊,這是解析器這次發現的片段&&(我一直都這樣做^^)這裏應該假設NSUTF8String,應該使用解析器確定的編碼:) –