データベースで単位区切り記号 (US/0x1f) を使用しました。XML 1.0 ファイルにエクスポートすると、それが受け入れられず、属性が空の値のままになります。
次のようなデータベースにデータがあります。
"option1=10;option2=20;option3=aaa[US]bbb[US]ccc;"
次のような XML 1.0 ファイルにエクスポートすることを想定しています。
<elementname, attr1="option1=10;option2=20;option3=aaa[US]bbb[US]ccc;"/>
ただし、[US] は XML 1.0 では受け入れられません。助言がありますか?
XML に書き込む前に、'\37' (oct 37, hex 1f) を "XXX"、"$"、"(0x1f)" などに置き換えることができます。
XMLからインポートしてデータベースに書き込むときに置き換えることができます。しかし、それを単位区切りの HTML エンティティである "& # x 1 F ;" に置き換えると、"& amp ; # x 1 F ;" になってしまい、これは明らかに私が望んでいたものではありません。
XML ファイルを手動で「& # x 1 F ;」に変更すると、MSXML を使用して読み込むことができず、「無効な Unicode 文字」というエラーが発生します。
助言がありますか?
ありがとうございました
概要:
類推してみましょう: コンパイラがどのように機能するかを考えてみましょう。「プリコンパイル」と「コンパイル」の 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 1 F _" のアイデアはhereからお借りしました。
みんなの助けに感謝