2

データベースで単位区切り記号 (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からお借りしました。

みんなの助けに感謝

4

2 に答える 2

3

U+001F UNIT SEPARATORの HTMLエンティティはありません。さらに、一般的な XML を扱う場合、HTML エンティティは無関係です。

文字参照&#x1f;、 HTML および XML では および になりますが、この&#31;文字は HTML または XML では許可されていません。XML 1.0 については、セクション2.2 Charactersを参照してください。規範的な定義は次のようになります (関連するコメントは誤解を招きやすく、コメントは規範的ではありません)。

Char       ::=      #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] |
                            [#x10000-#x10FFFF]

導き出される結論は、本文中の UNIT SEPARATOR の意味と目的によって異なります。一般的に定義された意味はありません。それに意味を割り当て、それに応じて処理するのはアプリケーション次第です。

通常、UNIT SEPARATOR は何らかの単位を区切るために使用されるため、入力データを処理して、そのような区切り記号の代わりに、データが XML 形式に変換されたときにマークアップで示される単位を持つようにするのが自然なアプローチです。したがって、[US] が UNIT SEPARATOR である aaa[US]bbb[US]ccc のようなデータの場合、次のようなものを生成します<unit>aaa</unit><unit>bbb</unit><unit>ccc</unit>

于 2013-04-26T07:07:12.083 に答える
2

このウェブサイト

http://www.fileformat.info/info/unicode/char/1f/index.htm

次のいずれかを提案します。

HTML エンティティ (10 進数) &#31;

HTML エンティティ (16 進数) &#x1f;

于 2013-04-26T05:41:48.810 に答える