0

iPad アプリ用に (μ、Λ、μ、ν、π) などの特殊文字の XML エンティティをデコードする方法を探しています。解決策を見つけるために、ブログや質問を何時間も調べました。

だから私はこれを見つけて、次のコード行を追加して修正しました。

    else if ([scanner scanString:@"µ" intoString:NULL])
        [result appendString:@"µ"];
    else if ([scanner scanString:@"&Lambda" intoString:NULL])
        [result appendString:@"Λ"];
    else if ([scanner scanString:@"Π" intoString:NULL])
        [result appendString:@"Π"];

しかし、私はこれを良い解決策とは感じていません。

だから、私はこれについて誰かの親切な助けを探しています。

XCode4 と iOS 4.3 が私の開発環境です。

4

1 に答える 1

1

デリゲートで NSXMLParser と適切なエンティティ呼び出しを使用するのではなく、手動でこの解析を行うことを既に決定していると仮定すると、おそらくテーブル駆動型パーサーを使用することになります。

XML の & は常にエンティティへの導入であるため、次のようなことを行っても安全です (HTML ではなく XML を解析していると仮定すると、何が許可されているかについて大幅に緩和された定義を持つ可能性があります)。

if ([scanner scanString: @"&" intoString: nil]) {
    NSString *entityNameString;
    if ([scanner scanUpToString: @";" intoString: entityNameString]) {
        NSString *entityValue =[entityDictionary objectForKey: entityNameString];
        if (entityValue)
             [result appendString: entityValue];
        else {
             // TODO: figure out if you want to blow an error, ignore the entity, or insert the original string
             [result appendString: [NSString stringWithFormat: @"&%@;", entityNameString]];
        }
    } else {
        // TODO: Determine if you want to blow an error, ignore, or insert the original string
        [result appendString: @"&"];
    }
}

entityDictionary は、各エンティティとそれが表す文字列を表すキーと値のペアの辞書になります。

NSDictionary *entityDictionary = [NSDictionary dictionaryWithObjectsAndKeys: @"µ",@"micro", @"π", @"Pi",nil];

または、次を使用して plist からロードすることもできます。

NSDictionary *entityDictionary = [NSDictionary dictionaryWithContentsOfURL: @"myEntityList.plist"];
于 2012-04-15T10:33:19.977 に答える