0

データベースにさまざまな変更を加えたWebサービスがあります。次のように、SQLタグを使用してWebサービスの戻り行を使用すると、次のようになります。

<sql>
   DELETE FROM TABLE WHERE ...
</sql>
<sql>
   INSERT INTO TABLE WHERE ...
</sql>
<sql>
   UPDATE TABLE SET ... WHERE ...
</sql>

このコードを次のようにNSMutableArrayに保存します。

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName  {
    if ([elementName isEqualToString:@"sql"]){
        [maResultado addObject:[NSMutableString stringWithFormat:@"%@", ResultadoSoap]];
        [ResultadoSoap setString:@""];
    }
}

これは良いことですが、Webサービスがアクセント付きの単語を返す場合(スペイン語であるためアクセント)、アプリはアクセントの後のフレーズのみを取得します。例:Webサービスはこれを返します:

<sql>
   INSERT INTO DATOS(datos, fecha) VALUES('Indagar si el médico a tenido oportunidad de ...', '20/02/2013')
</sql>

私はこれをします:

if ([elementName isEqualToString:@"sql"]){
    [maResultado addObject:[NSMutableString stringWithFormat:@"%@", ResultadoSoap]];
    [ResultadoSoap setString:@""];
}

そして、objectatindexのmaResultadoにはこれしかありません:

édico a tenido oportunidad de ...', '20/02/2013')
4

1 に答える 1

2

デリゲート関数はparser:foundCharacters:、XML 要素に対して複数回呼び出すことができます。これは特に、文字コンテンツに特殊文字が含まれている場合に発生します。あなたの場合、データについて

<sql>
   INSERT INTO DATOS(datos, fecha) VALUES('Indagar si el médico a tenido oportunidad de ...', '20/02/2013')
</sql>

デリゲート関数は 2 回呼び出され、最初は文字列で呼び出されます

INSERT INTO DATOS(datos, fecha) VALUES('Indagar si el m

そして再び文字列で

édico a tenido oportunidad de ...', '20/02/2013')

したがって、現在の文字列に文字列を追加する必要があります。parser:foundCharacters:

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    [currentElementValue appendString:string];
} 
于 2013-02-20T18:24:27.480 に答える