XmlDocument.CreateEntityReference(String) Método

Definição

Cria um XmlEntityReference com o nome especificado.

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

Parâmetros

name
String

O nome da referência da entidade.

Retornos

XmlEntityReference

O novo XmlEntityReference.

Exceções

O nome é inválido (por exemplo, nomes que começam com '#' são inválidos.)

Exemplos

O exemplo a seguir cria dois nós de referência de entidade e os insere em um documento 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

Comentários

Se a entidade referenciada for conhecida, a lista filho do XmlEntityReference nó será feita da mesma forma que a do nó correspondente XmlEntity .

Os namespaces usados no texto de substituição para a referência da entidade são associados no momento em que o pai do nó de referência da entidade é definido pela primeira vez (por exemplo, quando o nó de referência da entidade é inserido no documento). Por exemplo, dada a seguinte entidade:

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

Se você chamar CreateEntityReference("a") você receber de volta um único nó do tipo EntityReference sem filhos. Se você acrescentar esse nó como um filho do nó a seguir,

<item xmlns="urn:1"/>  

em seguida, no momento da chamada AppendChild, o pai do nó de referência de entidade recém-criado é definido e os filhos são expandidos nesse contexto de namespace. O nó b do elemento filho terá NamespaceURI igual a urn:1. Os nós filho da referência de entidade permanecem os mesmos mesmo se você mover a referência de entidade para um lugar no documento que tenha um contexto de namespace padrão diferente. Isso não acontece para nós de referência de entidade existentes quando você os remove e insere ou para referências de entidade com as quais você clona CloneNode. Isso só acontece para referências de entidade recém-criadas.

Se a entidade correspondente não estiver definida no DocumentType quando o nó de referência da entidade for adicionado, porque a referência de entidade não estiver definida, seu único nó filho será um nó de texto vazio.

As entidades internas amp, lt, gt, apos e quot também são permitidas e terão um nó de texto filho com o valor de caractere expandido apropriado.

Embora esse método crie o novo objeto no contexto do documento, ele não adiciona automaticamente o novo objeto à árvore de documentos. Para adicionar o novo objeto, você deve chamar explicitamente um dos métodos de inserção de nó.

De acordo com a recomendação XML (Linguagem de Marcação Extensível) 1.0 do W3C, nós EntityReference só são permitidos nos nós Element, Attribute e EntityReference.

Aplica-se a