1

XML ファイルからデータを取得する必要があるアプリケーションを開発しています。一部のノードには多くの文字が含まれており、この関数の使用に問題があります:

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

たとえば、アイテムの説明ノードの場合、最後の 20 ~ 30 文字しか取得できませんが、200 または 300 を取得します。

これを NSLog で確認したところ、問題はここにあるようです。何が悪いかわかりますか?

アドバイスをありがとう。

4

1 に答える 1

2

SAX パーサーは、一度にすべての文字を取得することを保証しません。特定のブロックからの文字のチャンクで複数の呼び出しを取得する場合があります。コードはそれらを単一の文字列に連結する必要があります。

パーサー オブジェクトは、いくつかの parser:foundCharacters: メッセージをデリゲートに送信して、要素の文字を報告する場合があります。string は現在の要素の文字コンテンツ全体の一部にすぎない可能性があるため、要素が変更されるまで、現在の文字の蓄積に追加する必要があります。

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
    if ([qualifiedName isEqualToString:@"myTag"]) {
        buf = [NSMutableString string];
    }
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    if ([qualifiedName isEqualToString:@"myTag"]) {
        buf = [buf stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
        NSLog(@"Got %@", buf);
    }
}

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    [buf appendString:string];
}
于 2012-05-27T22:02:02.230 に答える