0

私の NSXMLParser は、この文字列で壊れます:

<title>AAA &#8211; BCDEFGQWERTYUIO</title>

私はこのようにそれを解析しました、希望は正しい方法です:

- (void) parser: (NSXMLParser *) parser foundCharacters: (NSString *) string{
[...]
if ([currentElement isEqualToString:@"title"]) {
    if (![string isEqualToString:@""]) {
            [title addObject:string];
            NSLog(@"str: %@", string);
    }
}

それは私を返します:

str : AAA
str : -
str : BCDEFGQWERTYUIO

しかし、私は単一の文字列を返したい:

str : AAA - BCDEFGQWERTYUIO

タイトルが正しいから。

何か案が?

ありがとう。

4

2 に答える 2

1

didEndElement メソッドでオブジェクトを作成する方が良いことがわかりました。そうすれば、文字列データを一時的な文字列に追加し続けることができます。したがって、次のようなことを行うことができます(注:コードはテストされていません)

オブジェクトヘッダーで:

NSMutableString *currentElementData;

...

@property (nonatomic, retain) NSMutableString *currentElementData;

そして、あなたの解析コードでは、

- (void) parser: (NSXMLParser *) parser foundCharacters: (NSString *) string{
[...]
if ([currentElement isEqualToString:@"title"]) {
    [currentElementData appendString:string];
    }
}

その後、後で要素が終了しました

   - (void) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName...{
    [...]
    if ([elementName isEqualToString:@"title"]) {
        [title addObject:currentElementData];
         [currentElementData setString:@""];
        }
    }
于 2010-12-22T11:33:02.157 に答える
0

「<」や「&」などの文字は XML 要素では使用できないため、xml でCDATAセクションを使用できます。

「<」は、パーサーが新しい要素の開始と解釈するため、エラーを生成します。

「&」は、パーサーが文字エンティティの開始と解釈するため、エラーを生成します。

于 2010-12-22T11:44:46.883 に答える