1

データベースに「単位区切り」0x1F が保存されています。

私が望んでいたのは、MSXML6.dll を使用して単位区切り記号を XML 1.0 形式にエクスポートすることだけでした。

ここに私が持っている痛みがあります:

  1. 0x1F を XML ファイルに直接書き込むと、エラー メッセージが表示され、属性が空の文字列になります。

  2. HTML Entity "& # x 1 F;" に置き換えて XML ファイルに書き込むと、"& amp ; # x 1 F;" になり、残念です。

  3. 「& 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からお借りしました。みんなの助けに感謝

4

1 に答える 1

0

XML ファイルに内部 DTD を追加するとうまくいくのではないでしょうか?

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [<!ENTITY 0x1F "&#x1F;">]>
<root>
  <Units>Unit1&0x1F;Unit2</Units>
</root>
于 2013-04-28T23:36:56.677 に答える