1

文字列から「&」記号を削除するにはどうすればよいですか。私のxmlパーサーが失敗しています。

私が試してみました

[currentParsedCharacterData setString: [currentParsedCharacterData stringByReplacingOccurrencesOfString:@"&" withString:@"and"]];

でも効果はないようです

4

2 に答える 2

2

つまり、無効な XML を適切に処理したいということです。XML パーサーは、この XML が無効であることを適切に伝えているため、解析に失敗しています。この XML コンテンツを制御できないと仮定すると、このような一般的なエラーを事前に解析することをお勧めします。その出力は、成功の可能性が高いサニタイズされた XML ドキュメントになります。

ドキュメントをサニタイズするには、検索と置換を行うのと同じくらい簡単かもしれませんが、ブランケット置換を行うだけの問題は、たとえばまたは&の有効な使用法があることです。次のようなものを作成して、XML を変更することになります。&&©andcopy;

「アンパサンド スペース」を検索することはできますが、最後の文字としてアンパサンドを含む文字列 (簡単に処理できるアウトケース) は検出されません。実際に探しているのは&、a が続かない の出現、またはセミコロンはそれ自体で問題ないため;、次の前に任意のタイプの空白が出現する出現です。;

これやその他のエラーを検出する必要があるため、より多くの電力が必要な場合は、NSScannerまたはRegExマッチングにアクセスして、サニタイズ手順中にこのエラーやその他の一般的なエラーの発生を検索することをお勧めします。また、XML ファイルがかなり大きなものになることも非常に一般的です。そのため、これらをメモリ内文字列として扱う場合は注意が必要です。これによりアプリケーションがクラッシュしやすくなる可能性があります。管理しやすいチャンクに分割することは、NSScanner が非常にうまくできることです。

于 2010-02-25T15:39:46.673 に答える
1

NSStringのstringByReplacingOccurrencesOfStringを簡単に確認してください。

NSString* str = @"a & b";
[str stringByReplacingOccurrencesOfString:@"&" withString:@"and"]; // better replace by &

ただし、他の文字、つまり<>も処理する必要があります

于 2010-02-25T15:27:39.860 に答える