XmlDocument.CreateEntityReference(String) XmlDocument.CreateEntityReference(String) XmlDocument.CreateEntityReference(String) XmlDocument.CreateEntityReference(String) Method

Definición

Crea un objeto XmlEntityReference con el nombre especificado.Creates an XmlEntityReference with the specified name.

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 String String String

Nombre de la referencia a entidad.The name of the entity reference.

Devoluciones

Nuevo objeto XmlEntityReference.The new XmlEntityReference.

Excepciones

El nombre no es válido (por ejemplo, los nombres que empiezan por “#” no son válidos).The name is invalid (for example, names starting with'#' are invalid.)

Ejemplos

En el ejemplo siguiente se crean dos nodos de referencia de entidad y se insertan en un documento XML.The following example creates two entity reference nodes and inserts them into an XML document.

#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

Comentarios

Si se conoce la entidad a la que se hace referencia, la XmlEntityReference lista secundaria del nodo se hace igual que la del XmlEntity nodo correspondiente.If the referenced entity is known, the child list of the XmlEntityReference node is made the same as that of the corresponding XmlEntity node.

Los espacios de nombres utilizados en el texto de reemplazo para la referencia de entidad se enlazan en el momento en que se establece por primera vez el nodo primario del nodo de referencia de entidad (por ejemplo, cuando se inserta el nodo de referencia de entidad en el documento).The namespaces used in the replacement text for the entity reference are bound at the time the parent of the entity reference node is first set (for example, when the entity reference node is inserted into the document). Por ejemplo, dada la siguiente entidad:For example, given the following entity:

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

Si llama a CreateEntityReference("a") , obtendrá un solo nodo de tipo EntityReference sin elementos secundarios.If you call CreateEntityReference("a") you get back a single node of type EntityReference with no children. Si anexa este nodo como elemento secundario del siguiente nodo,If you append this node as a child of the following node,

<item xmlns="urn:1"/>  

a continuación, en el momento de AppendChildllamar a, se establece el elemento primario del nodo de referencia de entidad recién creado y los elementos secundarios se expanden en este contexto de espacio de nombres.then, at the time of calling AppendChild, the parent of the newly created entity reference node is set and the children are expanded in this namespace context. El nodo b de elemento secundario tendrá NamespaceURI igual a urn:1.The child element node b will have NamespaceURI equal to urn:1. Los nodos secundarios de la referencia de entidad siguen siendo los mismos incluso si se mueve la referencia de entidad a un lugar del documento que tiene un contexto de espacio de nombres predeterminado diferente.The child nodes of the entity reference remain the same even if you move the entity reference to a place in the document that has a different default namespace context. Esto no ocurre en los nodos de referencia de entidad existentes cuando se quitan e insertan o para las referencias de CloneNodeentidad con las que se clona.This does not happen for existing entity reference nodes when you remove and insert them or for entity references that you clone with CloneNode. Solo se produce para las referencias de entidad recién creadas.It only happens for newly created entity references.

Si la entidad correspondiente no está definida en DocumentType cuando se agrega el nodo de referencia de entidad, porque la referencia de entidad no está definida, su único nodo secundario será un nodo de texto vacío.If the corresponding entity is not defined in the DocumentType when the entity reference node is added, because the entity reference is not defined, its only child node will be an empty text node.

También se permiten las entidades integradas amp, lt, gt, apos y quot, y tendrán un nodo de texto secundario con el valor de carácter expandido adecuado.The built-in entities amp, lt, gt, apos, and quot are also allowed, and they will have a child text node with the appropriate expanded character value.

Aunque este método crea el nuevo objeto en el contexto del documento, no agrega automáticamente el nuevo objeto al árbol del documento.Although this method creates the new object in the context of the document, it does not automatically add the new object to the document tree. Para agregar el nuevo objeto, debe llamar explícitamente a uno de los métodos de inserción de nodo.To add the new object, you must explicitly call one of the node insert methods.

Según la recomendación del W3C lenguaje de marcado extensible (XML) 1,0, los nodos EntityReference solo se permiten dentro de los nodos Element, Attribute y EntityReference.According to the W3C Extensible Markup Language (XML) 1.0 recommendation, EntityReference nodes are only allowed within Element, Attribute and EntityReference nodes.

Se aplica a