保持されずに展開されるエンティティ参照Entity References are Expanded and Not Preserved

エンティティ参照が展開され、それが表すテキストに置き換えられる場合には、XmlEntityReference ノードは作成されません。When the entity reference is expanded and replaced by the text it represents, the XmlEntityReference node is not created. この場合はエンティティ宣言が解析され、宣言のコンテンツから作成されたノードが XmlEntityReference の代わりにコピーされます。Instead, the entity declaration is parsed, and nodes created from the content in the declaration are copied in the place of the XmlEntityReference. したがって、&publisher; の例では、&publisher; は保存されず、代わりに XmlText ノードが作成されます。Therefore, in the &publisher; example, the &publisher; is not saved, but instead, an XmlText node is created.

展開されたツリー構造expanded tree structure
エンティティ参照が展開される場合のツリー構造Tree structure for entity references that are expanded

B< などの文字エンティティは保持されません。Character entities such as B or < are not preserved. 文字エンティティは常に展開され、テキスト ノードとして表されます。Instead, they are always expanded and represented as text nodes.

XmlEntityReference ノードと、それに付随するエンティティ参照の子ノードを保持するには、EntityHandling フラグを ExpandCharEntities に設定します。To preserve XmlEntityReference nodes and child nodes of the entity reference attached to it, set the EntityHandling flag to ExpandCharEntities. それ以外の場合は、EntityHandling フラグを既定の ExpandEntities のままにしておきます。Otherwise, leave the EntityHandling flag at the default, which is to ExpandEntities. その場合、DOM ではエンティティ参照ノードが認識されません。In this case, you will not see entity reference nodes in the DOM. エンティティ参照ノードは、エンティティ宣言の子ノードのコピーに置き換えられます。The nodes are replaced by the nodes that are copies of the child nodes of the entity declaration.

エンティティ参照を保持しない場合の副作用の 1 つとして、そのドキュメントを保存して別のアプリケーションに渡したとき、受け取る側のアプリケーションでは、エンティティ参照によってノードが生成されたことを識別できないという点があります。One side effect of not preserving entity references is that when the document is saved and passed on to another application, the receiving application does not know that the nodes were generated by an entity reference. しかし、エンティティ参照を保持する場合は、受け取り側アプリケーションがエンティティ参照を認識し、子ノードを読み取ります。However, when entity references are preserved, a receiving application sees an entity reference and reads the child nodes. 子ノードが、エンティティ宣言に含まれていた情報を表していることは明らかです。It is apparent that the child nodes represent the information that was in the entity declaration. たとえば、エンティティ参照が保持される場合、DOM の構造は理論的に次のようになります。For example, the DOM theoretically has the following structure if entity references are preserved.

XmlElement: publisherXmlElement: publisher

XmlEntityReference: &publisher;XmlEntityReference: &publisher;

XmlText: Microsoft PressXmlText: Microsoft Press

DOM でエンティティ参照が展開される場合は、次のようなツリー構造になります。既定のメソッドでは、エンティティ参照が展開されます。If entity references are expanded in the DOM, which is the default method, the structure has this type of tree:

XmlElement: publisherXmlElement: publisher

XmlText: Microsoft PressXmlText: Microsoft Press

エンティティ参照がないため、受け取る側のアプリケーションでは、"Microsoft Press" を含む XmlText ノードがエンティティ宣言から作成されたことを識別できません。Notice that the entity reference node is gone, and the receiving application cannot tell that the XmlText node containing "Microsoft Press" was created from an entity declaration.

エンティティを解決できないリーダーを使用すると、Load メソッドは、エンティティ参照を見つけたときに例外をスローします。If you use a reader that cannot resolve entities, the Load method throws an exception when it encounters an entity reference.

参照See Also

XML ドキュメント オブジェクト モデル (DOM)XML Document Object Model (DOM)