著者: AngelGavin 出典: CSDN
外国語や特殊文字を含むドキュメントをロードするにはどうすればよいですか?
ドキュメントには次のような外国文字が含まれる場合があります。
外国の文字 (úóí?)
たとえば、「粲」などの外国文字の前にエスケープ シーケンスを付ける必要があります。外部文字は、次のように UTF-8 エンコードすることも、別のエンコードで指定することもできます。
外国文字(?磲)
XML が正しくロードされるようになりました。
他の文字は XML で予約されているため、別の方法で処理する必要があります。以下の XML:
あれこれ
次のエラーが発生します。
ここにスペースは使用できません。
行 0000001: あれこれ
場所 0000012: ----------^
ここで、& は XML 構文構造の一部です。XML データ ソース内に配置されただけでは、& として解釈できません。 「エンティティ」と呼ばれる特殊な文字シーケンスを置き換える必要があります。
あれこれ
次の文字には対応するエンティティが必要です。
< <
& &
>>
「」
「」
引用符文字はマークアップ内の属性値の区切り文字として使用されるため、通常は属性値内で使用できません。たとえば、次の場合はエラーが返されます。
ここでの一重引用符は、属性の区切り文字として、また属性値自体の中で使用されています。この問題を解決するには、属性区切り文字を二重引用符に変更する
か、エンティティに一重引用符をエスケープすることができます。
上記のどちらのメソッドでも、XML オブジェクト モデルの getAttribute メソッドを通じて属性値 John's Stuff を返します。同様に、二重引用符の場合は、エンティティ ".
テキストを CDATA セクションに配置することで、要素コンテンツ内の特殊文字を処理することもできます。以下は正しいです:
この例では、XML オブジェクト モデルは CDATA ノードを XML ノードの子ノードとして表示し、
単なる「テキスト」コンテンツである文字列 This & を返します。
ノード値として。
Visual Studio 6.0 C++ で MSXML COM コンポーネントを使用する方法は?
Visual C++ 6.0 で MSXML COM コンポーネントを使用する最も簡単な方法は、#import ディレクティブを使用することです。
#import "msxml.dll"named_guids no_namespace#import "msxml.dll"named_guids no_namespace
すべての IXML* インターフェースとインターフェース ID を定義して、アプリケーションで使用できるようにします。 MSXML タイプ ライブラリとヘッダー ファイル (英語) は、クラス IID を含む uuid.lib だけでなく、INETSDK からも入手できます。
XML で HTML エンティティを使用するにはどうすればよいですか?
次の XML には HTML エンティティが含まれています。
著作権 ? 2000、Microsoft Inc、全著作権所有。
次のエラーが発生します。
未定義のエンティティ「コピー」への参照。
行: 1、位置: 23、エラーコード: 0xC00CE002
著作権 2000、...
-----------------------^
これは、XML には組み込みエンティティが 5 つしかないためです。組み込みエンティティの詳細については、「外国語および特殊文字を含むドキュメントをロードするにはどうすればよいですか?」を参照してください。 。
HTML エンティティを使用するには、DTD を使用して定義する必要があります。 DTD の詳細については、W3C XML Recommendations (英語) を参照してください。この DTD を使用するには、次のように DOCTYPE タグに直接含めます。
著作権 ? 2000、Microsoft Inc、全著作権所有。
これをロードするには、IXMLDOMDocument インターフェイスの validateOnParse 属性をオフにする必要があります。これを検証テスト ページに貼り付け、DTD 検証をオフにして、[検証] をクリックしてみてください。ドキュメントがロードされ、バリデーター ページの最後にある DOM ツリーに著作権文字が表示されることに注目してください。
DTD 検証が完了している場合は、パラメータ エンティティである HTML エンティティを次のように既存の DTD に含める必要があります。
%HTMLENT;
%HTMLENT;
すべての HTML エンティティを定義して、XML ドキュメントで使用できるようにします。
要素コンテンツ内の空白文字をどのように扱うか?
XML DOM には、要素のテキスト コンテンツにアクセスする 3 つの方法があります。 属性
の動作
nodeValue 元の XML ソースで指定されているとおり、TEXT、CDATA、COMMENT、および PI ノード上の元のテキスト コンテンツ (空白文字を含む) を返します。 ELEMENT ノードおよび DOCUMENT 自体の場合は、null が返されます。
データ ノード値と同じ
テキスト リピートは、指定されたサブツリー内の複数の TEXT ノードと CDATA ノードを連結し、結合した結果を返します。
注: 空白文字には、改行、タブ、スペースが含まれます。
通常、nodeValue プロパティは、ドキュメントのロード方法や現在の xml:space スコープに関係なく、元のドキュメントの内容を返します。
text 属性は、指定されたサブツリー内のすべてのテキストを連結し、エンティティを拡張します。これは、ドキュメントのロード方法、preserveWhiteSpace スイッチの現在の状態、および現在の xml:space スコープに関連します。以下を参照してください。
ドキュメントがロードされるときは、preserveWhiteSpace = true
preserveWhiteSpace=true | prepareWhiteSpace=true | prepareWhiteSpace=false | prepareWhiteSpace=false |
xml:space=preserve | xml:space=default | xml:space=preserve | xml:space=default |
保持 保持 | 保持 | 保持 | および切り捨て |
ドキュメントのロード時、preserveWhiteSpace = false
preserveWhiteSpace=trueserveWhiteSpace | =truepreserveWhiteSpace= | falsepreserveWhiteSpace= | false |
xml:space=preserve | xml:space=default | xml:space=preserve | xml:space=default |
半分保持 | 半分保持および切り詰め | 半分保持 | 半分保持および切り詰め |
ここに保持「切り捨て」とは、先頭と末尾の空白が削除されたことを意味します。「半保存」とは、「重要な空白文字」が保持され、「重要でない空白文字」が正規化されたことを意味します。重要な空白文字は、テキスト コンテンツ内の空白文字です。重要でない空白文字は、トークン間の空白文字であり、次のようになります:
n
tジェーンn
tスミスn
この例では、赤は無視してもよい重要ではない空白文字ですが、緑はテキスト コンテンツの一部であり、無視できない重要な意味を持っているため、重要な空白文字です。したがって、この例では、text プロパティは次を返します。
ステータスの戻り値は「nt JanentSmith n」のままです。
「JanentSmith」を保持して切り詰めます
セミリザーブ「ジェーン・スミス」
「Jane Smith」を半分保持して切り捨てる
「半分保持」では、重要でない空白文字が正規化されることに注意してください。たとえば、改行文字とタブ文字は 1 つのスペースに削減されます。 xml:space 属性とpreserveWhiteSpace スイッチを変更すると、テキスト プロパティはそれに応じて異なる値を返します。
CDATA および xml:space="preserve" サブツリー境界
次の例では、CDATA ノードまたは「予約」ノードの内容は、重要ではない空白文字の正規化に参加しないため、連結されます。例えば:
n
t ジェーン n
t スミス ]>n
この場合、CDATA ノード内の空白文字は「重要でない」空白文字と「マージ」されなくなり、切り捨てられなくなります。したがって、「半分保存され切り詰められた」場合は、次のように返されます:
"Jane Smith"
ここで、 と タグの間にある重要でない空白文字は、CDATA ノードの内容に関係なく含まれます。 CDATA を次のものに置き換えると、同じ結果が返されます:
Smith
、DTD の一部としてロードおよび解析され、DOCTYPE ノードの下に表示される
特別なエンティティです
。xml:space スコープを持つ必要はありません。例えば:
ジェーンn
tn
">
]>
&ジェーン;
prepareWhiteSpace=false (DOCTYPE タグのスコープ内) と仮定すると、エンティティの解析時に重要でない空白文字は失われます。エンティティには空白文字ノードがありません。ツリーは次のようになります。
DOCTYPE foo
エンティティ: ジェーン
要素: 従業員
要素: 名前
本文: ジェーン
要素: タイトル
TEXT>:ソフトウェア設計エンジニア
要素: foo
属性: xml:space="保存"
エンティティ参照: ジェーン
DOCTYPE 内の ENTITY ノードの下で公開される DOM ツリーには、WHITESPACE ノードが含まれていないことに注意してください。これは、エンティティ参照が xml:space="preserve" の範囲内にある場合でも、ENTITYREF ノードの子ノードにもWHITESPACE ノードがないことを意味します。
特定のドキュメント内で参照される ENTITY の各インスタンスには通常、同じツリーがあります。
エンティティで空白文字を絶対に保持する必要がある場合は、エンティティで独自の xml:space 属性を内部的に指定するか、ドキュメントのpreserveWhiteSpace スイッチを true に設定する必要があります。
属性内の空白文字をどのように扱うか?
プロパティ値にアクセスするにはいくつかの方法があります。 IXMLDOMAttribute インターフェイスには、Microsoft 拡張機能の nodeValue および text 属性に相当する nodeValue 属性があります。これらのプロパティは以下を返します。 プロパティによって返されるテキスト
attrNode.nodeValue
attrNode.value
getAttribute("name") は、元のドキュメントとまったく同じコンテンツ (および拡張エンティティ) を返します。
attrNode.nodeTypedValue Null
attrNode.text は、先頭と末尾の空白文字が切り捨てられている点を除いて、nodeValue と同じです。
「XML 言語」仕様では、XML アプリケーションの次の動作を定義しています。 属性のタイプ 返されるテキスト CDATA ID、IDREF、IDREFS、ENTITY、ENTITIES、NOTATION、列挙型
半正規化 完全な正規化
ここで、半正規化は改行とタブ文字の変換を表します。は空間ですが、複数の空間が 1 つの空間に縮退することはありません。