2012-12-28 49 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,应该使用解析器确定的编码:) –