0

これは私のXMLです:

<?xml version="1.0" encoding="UTF-8"?>
<Tests>
    <Test case="1">
        <str>200000</str>
    </Test>
    <Test case="2">
        <str>200thousand</str>
    </Test>
    <Test case="3">
        <str>共20萬&lt;/str>
    </Test>
    <Test case="4">
        <str>20萬&lt;/str>
    </Test>
</Tests>

これはパーサーの一部であり、ほとんどのチュートリアルで見つけたので非常に標準的です。

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
    if(!currentElementValue)
        currentElementValue = [[NSMutableString alloc] initWithString:string];
    else
        currentElementValue = 
            (NSMutableString *) [string stringByTrimmingCharactersInSet:
                [NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

次に、この行を使用して、各 currentElementValue を解析して testObj の各変数に変換します

[testObj setValue:currentElementValue forKey:elementName];

コードは XML を testObj に正常に解析します。ただ、問題はケース4の「20」が消えていることです。つまり、要素が数値で始まり、その後に漢字が続くと、数値は消えます。

その上、私が使用する場合:

        [currentElementValue appendString:string];

それ以外の:

        currentElementValue = 
            (NSMutableString *) [string stringByTrimmingCharactersInSet:
                [NSCharacterSet whitespaceAndNewlineCharacterSet]];

要素はすべての文字を表示できますが、多くの空白で始まります。

数値が消えた理由を理解し、先頭に空白を付けずにすべての文字を表示する解決策を探したいと思います。

あなたが提供するのに十分親切な助けを前もって感謝します!

4

1 に答える 1

5

parser:foundCharacters:デリゲート メソッドのドキュメントを参照してください。

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

したがって、で使用する必要がありappendStringますfoundCharacters。追加の空白は、 および で現在の文字列をリセットしなかったことが原因である可能性がありdidStartElementますdidEndElement

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
     currentElementValue = nil;
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
     if (currentElementValue) {
         NSLog(@"%@ = %@", elementName, currentElementValue);
         currentElementValue = nil;
     }
}

必要に応じて、不要な空白を削除できますdidEndElement

于 2013-02-03T08:07:14.867 に答える