ホームページ  >  記事  >  バックエンド開発  >  XML の使用開始に関するよくある質問 (3)

XML の使用開始に関するよくある質問 (3)

黄舟
黄舟オリジナル
2016-12-22 17:38:201868ブラウズ

外国語や特殊文字を含むドキュメントをロードするにはどうすればよいですか?

文書には次のような外国文字を含めることができます:


外国文字 (úóí?)


例えば、磲などの外国文字の前にエスケープシーケンスを付ける必要があります。以下に示すように、外部文字は UTF-8 でエンコードすることも、別のエンコードで指定することもできます:


外部文字 (磲)


XML が正しく読み込まれるようになりました。

他の文字は XML で予約されているため、別の方法で処理する必要があります。次の XML:


This & that
は次のエラーを生成します:
ここにはスペースは使用できません。
Line 0000001: This & that
Location 0000012: ----------^


ここで & は XML 構文構造の一部であり、XML データ ソース内にのみ配置されている場合は解釈できません。として & 。 「エンティティ」と呼ばれる特殊な文字シーケンスを置き換える必要があります。

This & that
次の文字には対応するエンティティが必要です:


< <
& &
区切り文字のため、通常は属性値内で使用できません。たとえば、次の場合はエラーが返されます:

ここでの一重引用符は、属性の区切り文字として、また属性値自体の中で使用されます。この問題を修正するには、属性の区切り文字を二重引用符に変更します:

または、一重引用符をエンティティにエスケープすることもできます'

上記のメソッドは両方とも、 XML オブジェクト モデル。同様に、二重引用符の場合は、エンティティ

" を使用できます。

CDATA セクションにテキストを配置することで、要素コンテンツ内の特殊文字を処理することもできます。次は正しいです:

この例では、XML オブジェクト モデルは、 CDATA ノードを XML ノードの子ノードとして指定すると、文字列


This & that is just "text" content.
を nodeValue として返します

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 からも入手できます

XML で HTML エンティティを使用する方法は?次の XML には HTML エンティティが含まれています。 :


Copyright ? 2000, Microsoft Inc, All Rights Reserved.

未定義のエンティティ 'copy' への参照

Line: 1, Location: 23,エラーコード: 0xC00CE002

Copyright ? 2000, ...

--------------------------^

これは、XML が 5 つしかないためです。組み込みエンティティの詳細については、「HTML エンティティを使用するには、DTD を使用して定義する必要があります。」を参照してください。この DTD を使用するには、次のように DOCTYPE タグに含めてください。インターフェイスを検証ツールのテスト ページに貼り付け、DTD 検証をオフにし、検証をクリックします。ドキュメントが読み込まれ、検証ツール ページの最後に著作権文字が表示されます。

DTD 検証が完了している場合は、パラメータ エンティティとして HTML エンティティを次のように既存の DTD に含める必要があります:



%HTMLENT;
%HTMLENT;

すべての HTML エンティティを定義し、それらを で使用します。 XML ドキュメント。

要素コンテンツ内の空白文字をどう扱うか?

XML DOM には、要素のテキスト コンテンツにアクセスする 3 つの方法があります:


属性の動作

nodeValue 元の XML ソースで指定されているように、TEXT、CDATA、COMMENT、および PI ノード上の元のテキスト コンテンツ (空白文字を含む) を返します。 。 ELEMENT ノードおよび DOCUMENT 自体の場合は、null が返されます。

データ nodeValue と同じ

テキスト 指定されたサブツリー内の複数の TEXT ノードと CDATA ノードを繰り返し接続し、結合した結果を返します。

注: 空白文字には、改行、タブ、スペースが含まれます。

nodeValue 属性は通常、ドキュメントのロード方法や現在の xml:space スコープに関係なく、元のドキュメントのコンテンツを返します。

text属性は、指定されたサブツリー内のすべてのテキストを接続し、エンティティを展開します。これは、ドキュメントのロード方法、PReserveWhiteSpace スイッチの現在の状態、および現在の xml:space スコープに関係します。以下を参照してください。

ドキュメントがロードされるときはpreserveWhiteSpace = true

preserveWhiteSpace=true preserveWhiteSpace=true preserveWhiteSpace=false preserveWhiteSpace=false

xml:space=preserve xml:space=default xml:space=preserve xml :space=default

reserved、reserved Preserve ドキュメントのロード時に保持して切り詰めます PreserveWhiteSpace = false


preserveWhiteSpace=true prepareWhiteSpace=false prepareWhiteSpace=false

xml:space=preserve xml:space=default xml:space=preserve xml :space=default

Half-保存 半分保存されて切り捨てられた 半分保存 半分保存されて切り詰められた

ここでの保存とは、元のテキストの内容が元の XML 文書とまったく同じであることを意味し、切り捨てとは、先頭と末尾のスペースが削除されていることを意味し、セミ-preserved は、「重要な空白文字」が保持され、「重要でない空白文字」が正規化されることを意味します。重要な空白文字は、テキスト コンテンツ内の空白文字です。重要でない空白文字はトークン間の空白文字で、次のようになります:

n
t Janen

tSmith n

この例では、赤は無視できる重要でない空白文字であり、緑は空白文字であるため重要です。はテキストコンテンツの一部であるため、無視できない重要な意味を持っています。したがって、この例では、text プロパティは次を返します:

ステータスの戻り値

"nt JanentSmith n" を保持する

"JanentSmith" を保持して切り捨てる

Jane Smith "を半分保持して切り捨てる"


"Jane Smith" を半分保持して切り詰める

「半保存」は重要でない空白文字を正規化することに注意してください。たとえば、改行文字やタブ文字は 1 つのスペースに削減されます。 xml:space 属性とpreserveWhiteSpace スイッチを変更すると、テキスト プロパティはそれに応じて異なる値を返します。

CDATA と xml:space="preserve" サブツリー境界
以下の例では、CDATA ノードまたは "preserve" ノードの内容は、重要でない空白文字の正規化に参加しないため、連結されます。例:

n

t Jane n

t Smith ]>n

この場合、CDATA ノード内の空白文字は「重要でない」空白文字と「マージ」されなくなり、切り捨てられなくなります。したがって、「半保存され切り詰められた」ケースでは、次のものが返されます:

「Jane Smith 」

ここで、 と タグの間にある重要でない空白文字は、CDATA ノードの内容に関係なく含まれます。 CDATA を次のものに置き換えると、同じ結果が返されます:


Smith エンティティは特別です

エンティティは DTD の一部としてロードおよび解析され、DOCTYPE ノードの下に表示されます。 xml:space スコープを持つ必要はありません。例:

Jane n

tn
">

]>

&Jane;


prepareWhiteSpace=false (DOCTYPE タグの範囲内) と仮定すると、エンティティの解析時に重要でない空白文字は失われます。空白文字ノードがあります:


DOCTYPE foo
ENTITY: Jane

ELEMENT: name

ELEMENT: title
TEXT>:Software Design Engineer

ELEMENT: foo

ATTRI BUTE: xml :space="preserve "
ENTITYREF: Jane


DOCTYPE 内の ENTITY ノードの下で公開されている DOM ツリーには、WHITESPACE ノードが含まれていないことに注意してください。これは、エンティティ参照がin the xml 同じことが :space="preserve" にも当てはまります

特定のドキュメントで参照される ENTITY のすべてのインスタンスには、通常、同じツリーがあります

エンティティが空白文字を絶対に保持する必要がある場合は、そのエンティティ自体をその XML 内で指定する必要があります。 :space 属性、またはドキュメントのpreserveWhiteSpace スイッチを true に設定する必要があります。

属性内の空白文字を処理するには?

属性値にアクセスするには、いくつかの方法があります。これは、IXMLDOMAttribute 属性と同等です。 Microsoft 拡張機能。nodeValue プロパティと text プロパティは以下を返します。 プロパティによって返されるテキスト


attrNode.nodeValue
attrNode.value
getAttribute("name") は、元のドキュメントとまったく同じコンテンツ (および拡張エンティティ) を返します。
attrNode.nodeTypedValue Null
attrNode.text は、先頭と末尾の空白文字が切り捨てられている点を除き、nodeValue と同じです。


「XML 言語」仕様では、XML アプリケーションの次の動作を定義しています: 属性タイプによって返されるテキスト
CDATA ID、IDREF、IDREFS、ENTITY、ENTITIES、NOTATION、列挙

半正規化 完全に正規化

ここで準正規化改行やタブ文字をスペースに変換することになりますが、複数のスペースが1つのスペースに縮退することはありません。

上記は、XML を始めるための FAQ (3) の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。