XmlDocument.CreateEntityReference(String) メソッド

定義

指定した名前を使用して、XmlEntityReference を作成します。

public:
 virtual System::Xml::XmlEntityReference ^ CreateEntityReference(System::String ^ name);
public virtual System.Xml.XmlEntityReference CreateEntityReference (string name);
abstract member CreateEntityReference : string -> System.Xml.XmlEntityReference
override this.CreateEntityReference : string -> System.Xml.XmlEntityReference
Public Overridable Function CreateEntityReference (name As String) As XmlEntityReference

パラメーター

name
String

エンティティ参照の名前。

戻り値

XmlEntityReference

新しい XmlEntityReference

例外

名前が正しくありません (たとえば、# で始まる名前は使用できません)

次の例では、2 つのエンティティ参照ノードを作成し、XML ドキュメントに挿入します。

#using <System.Xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
int main()
{
   
   //Create the XmlDocument.
   XmlDocument^ doc = gcnew XmlDocument;
   doc->LoadXml( "<!DOCTYPE book [<!ENTITY h 'hardcover'>]><book genre='novel' ISBN='1-861001-57-5'><title>Pride And Prejudice</title><misc/></book>" );
   
   //Create an entity reference node. The child count should be 0 
   //since the node has not been expanded.
   XmlEntityReference^ entityref = doc->CreateEntityReference( "h" );
   Console::WriteLine( entityref->ChildNodes->Count );
   
   //After the node has been added to the document, its parent node
   //is set and the entity reference node is expanded.  It now has a child
   //node containing the entity replacement text. 
   doc->DocumentElement->LastChild->AppendChild( entityref );
   Console::WriteLine( entityref->FirstChild->InnerText );
   
   //Create and insert an undefined entity reference node.  When the entity
   //reference node is expanded, because the entity reference is undefined
   //the child is an empty text node.
   XmlEntityReference^ entityref2 = doc->CreateEntityReference( "p" );
   doc->DocumentElement->LastChild->AppendChild( entityref2 );
   Console::WriteLine( entityref2->FirstChild->InnerText );
}

using System;
using System.IO;
using System.Xml;

public class Sample
{
  public static void Main()
  {
    //Create the XmlDocument.
    XmlDocument doc = new XmlDocument();
    doc.LoadXml("<!DOCTYPE book [<!ENTITY h 'hardcover'>]>" +
                "<book genre='novel' ISBN='1-861001-57-5'>" +
                "<title>Pride And Prejudice</title>" +
                "<misc/>" +
                "</book>");

    //Create an entity reference node. The child count should be 0
    //since the node has not been expanded.
    XmlEntityReference entityref = doc.CreateEntityReference("h");
    Console.WriteLine(entityref.ChildNodes.Count );

    //After the node has been added to the document, its parent node
    //is set and the entity reference node is expanded.  It now has a child
    //node containing the entity replacement text.
    doc.DocumentElement.LastChild.AppendChild(entityref);
    Console.WriteLine(entityref.FirstChild.InnerText);

    //Create and insert an undefined entity reference node.  When the entity
    //reference node is expanded, because the entity reference is undefined
    //the child is an empty text node.
    XmlEntityReference entityref2 = doc.CreateEntityReference("p");
    doc.DocumentElement.LastChild.AppendChild(entityref2);
    Console.WriteLine(entityref2.FirstChild.InnerText);
  }
}
Option Explicit
Option Strict

Imports System.IO
Imports System.Xml

Public Class Sample
    
    Public Shared Sub Main()
        'Create the XmlDocument.
        Dim doc As New XmlDocument()
        doc.LoadXml("<!DOCTYPE book [<!ENTITY h 'hardcover'>]>" & _
                    "<book genre='novel' ISBN='1-861001-57-5'>"  & _
                    "<title>Pride And Prejudice</title>"  & _
                    "<misc/>"  & _
                    "</book>")
        
        'Create an entity reference node. The child count should be 0 
        'since the node has not been expanded.
        Dim entityref As XmlEntityReference = doc.CreateEntityReference("h")
        Console.WriteLine(entityref.ChildNodes.Count)
        
        'After the node has been added to the document, its parent node
        'is set and the entity reference node is expanded.  It now has a child
        'node containing the entity replacement text. 
        doc.DocumentElement.LastChild.AppendChild(entityref)
        Console.WriteLine(entityref.FirstChild.InnerText)
        
        'Create and insert an undefined entity reference node.  When the entity
        'reference node is expanded, because the entity reference is undefined
        'the child is an empty text node.
        Dim entityref2 As XmlEntityReference = doc.CreateEntityReference("p")
        doc.DocumentElement.LastChild.AppendChild(entityref2)
        Console.WriteLine(entityref2.FirstChild.InnerText)
    End Sub
End Class

注釈

参照先エンティティがわかっている場合、ノードの XmlEntityReference 子リストは、対応する XmlEntity ノードの子リストと同じになります。

エンティティ参照の置換テキストで使用される名前空間は、エンティティ参照ノードの親が最初に設定されるときにバインドされます (たとえば、エンティティ参照ノードがドキュメントに挿入されたとき)。 たとえば、次のエンティティを指定します。

<!ENTITY a "<b>test</b>">  

呼び出 CreateEntityReference("a") すと、EntityReference 型の 1 つのノードが返され、子は表示されません。 このノードを次のノードの子として追加する場合は、

<item xmlns="urn:1"/>  

その後、呼び出し AppendChild時に、新しく作成されたエンティティ参照ノードの親が設定され、子がこの名前空間コンテキストで展開されます。 子要素ノード b には、NamespaceURI が等しくなります urn:1。 既定の名前空間コンテキストが異なるドキュメント内の場所にエンティティ参照を移動しても、エンティティ参照の子ノードは変わりません。 これは、既存のエンティティ参照ノードを削除して挿入するとき、または複製 CloneNode先のエンティティ参照では発生しません。 これは、新しく作成されたエンティティ参照に対してのみ発生します。

エンティティ参照ノードが追加されるときに対応するエンティティが DocumentType で定義されていない場合、エンティティ参照が定義されていないため、その唯一の子ノードは空のテキスト ノードになります。

組み込みのエンティティ アンプ、lt、gt、apos、および quot も使用でき、適切な拡張文字値を持つ子テキスト ノードが作成されます。

このメソッドは、ドキュメントのコンテキストで新しいオブジェクトを作成しますが、ドキュメント ツリーに新しいオブジェクトを自動的に追加することはありません。 新しいオブジェクトを追加するには、ノード挿入メソッドのいずれかを明示的に呼び出す必要があります。

W3C 拡張マークアップ言語 (XML) 1.0 の推奨事項に従って、EntityReference ノードは、要素、属性、EntityReference ノード内でのみ許可されます。

適用対象