1

我从服务接收到 xml 形式的响应,我使用 nsxmlparser 对其进行解析。在一个实例中,我收到了一个 xml,其中两个标签的内容相同。(重复项目如下 xml)

收到的 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 个字符,包括将被编码的字母、算术和一般标点符号。

概率:

在 -(void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock 中,CDATABlock变量中的方法内容在两种情况下都不相同(两个标签)。在一种情况下,它给了我所有 6000 个字符,在另一种情况下,它给我的只有几个可能是大约 300 个字符。我确认的两种情况下的文本(6000 个字符)都是相同的。

可能是什么原因?有人可以帮助我,可能是像我这样早先遇到过此类问题的人。

提前 Tnx。如果有什么不清楚或不明白的地方,请告诉我。

4

2 回答 2

1

这就是 cdata 的用途——它不应该被解析

CDATA -(未解析的)字符数据

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

PCDATA 应该被解析


你必须保存 NSData 块(可能被调用 N 次,所以你必须连接那些东西)并且 - 在你的情况下 - 然后将结果解析为单独的 XML

于 2012-12-28T15:50:12.910 回答
0

只需调用以下函数以及其他 NSXMLParser 函数。然后它将开始处理 CDATA 块。

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

}

您可以 NSLog someString,它会显示 CDATA 块的内容。

于 2012-12-29T07:49:39.883 回答