データベースに「単位区切り」0x1F が保存されています。
私が望んでいたのは、MSXML6.dll を使用して単位区切り記号を XML 1.0 形式にエクスポートすることだけでした。
ここに私が持っている痛みがあります:
0x1F を XML ファイルに直接書き込むと、エラー メッセージが表示され、属性が空の文字列になります。
HTML Entity "& # x 1 F;" に置き換えて XML ファイルに書き込むと、"& amp ; # x 1 F;" になり、残念です。
「& amp ; # x 1 F ;」を置き換えるように XML ファイルを手動で変更した場合 "& # x 1 F ;" に変更すると、XML パーサーは "無効な Unicode 文字" という例外で失敗します。
質問: では、XML 1.1 を使用できない場合、「単位区切り文字」を XML ファイルに書き込んでインポートできるようにするための最善の解決策は何ですか?
注: 考えられる解決策の 1 つは、「単位区切り文字」を「 $ 」などの奇妙な文字列に置き換えることです。しかし、これはまったく良い名前ですか?「0x1F」または「#x1F」または「#x1F;」を使用する場合、あなたの意見はどうですか。「」の代わりに?どちらが優れているか、またはより優れた候補はありますか?
概要:
類推してみましょう: コンパイラがどのように機能するかを考えてみましょう。「プリコンパイル」と「コンパイル」の 2 つのフェーズがあります。
XML ファイル生成の場合、これは「コンパイル」フェーズのように機能します。たとえば、「<」を「& lt ;」に変換します。
ただし、単位区切り記号は XML 1.0 でサポートされていないため、「コンパイル」フェーズでは HTML エンティティ「& # x 1 F ;」に変換されません。
したがって、「プリコンパイル」フェーズで解決策を探す必要があります。これは、アプリケーションの責任です。
書くとき:
Option1: <unit>aaa</unit><unit>bbb</unit>
Option2: simply use "_x241F_" to replace "\37" in the string if "_x241F_" is not conflicting with any existing token in the string.
読むとき:
According to Option1: Load the elements, catenate to a single string with "\37" as separator.
According to Option2: simply use "\37" to replace "_x241F_".
また、MSXML (最高バージョンの MSXML6.dll でさえ) が XML 1.1 をロードしないこともわかりました。
そのため、残念ながら MSXML を使用している場合は、「コンパイル」フェーズに入る前に、独自の「プリコンパイル」コードを記述して Unicode 文字を処理する必要があります。
注: "_ x 2 4 1F _" のアイデアはhereからお借りしました。みんなの助けに感謝