1

サービスから xml の形式で応答を受け取り、nsxmlparser を使用して解析します。インスタンスでは、コンテンツが 2 つのタグで同じである 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変数のコンテンツは、両方のケース (2 つのタグ) で同じではありません。あるインスタンスでは 6000 文字すべてが表示され、別のインスタンスではテキスト(6000文字)はどちらの場合も同じで、確認したところ、300文字程度になる可能性があります。

その理由は何ですか?私のように以前にそのような問題に直面したことがある人は、誰かが私を助けることができますか?

事前に Tnx.Plz 何かが明確でないか、理解されていない場合はお知らせください。

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 に答える