XmlDocument.CreateEntityReference(String) Metodo

Definizione

Crea un oggetto XmlEntityReference con il nome specificato.

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

Parametri

name
String

Nome del riferimento a entità.

Restituisce

XmlEntityReference

Nuovo oggetto XmlEntityReference.

Eccezioni

Il nome non è valido, ad esempio i nomi che iniziano con '#' non sono validi.

Esempio

Nell'esempio seguente vengono creati due nodi di riferimento di entità e li inserisce in un 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

Commenti

Se l'entità a cui si fa riferimento è nota, l'elenco figlio del XmlEntityReference nodo viene reso uguale a quello del nodo corrispondente XmlEntity .

Gli spazi dei nomi usati nel testo sostitutivo per il riferimento all'entità vengono associati al momento del primo set dell'elemento padre del nodo di riferimento dell'entità, ad esempio quando il nodo di riferimento dell'entità viene inserito nel documento. Ad esempio, data l'entità seguente:

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

Se si chiama CreateEntityReference("a") viene restituito un singolo nodo di tipo EntityReference senza elementi figlio. Se si aggiunge questo nodo come elemento figlio del nodo seguente,

<item xmlns="urn:1"/>  

quindi, al momento della chiamata AppendChild, l'elemento padre del nodo di riferimento all'entità appena creato viene impostato e gli elementi figlio vengono espansi in questo contesto dello spazio dei nomi. Il nodo b dell'elemento figlio avrà NamespaceURI uguale a urn:1. I nodi figlio del riferimento all'entità rimangono invariati anche se si sposta il riferimento all'entità in una posizione nel documento con un contesto dello spazio dei nomi predefinito diverso. Ciò non si verifica per i nodi di riferimento di entità esistenti quando vengono rimossi e inseriti o per i riferimenti alle entità clonate con CloneNode. Si verifica solo per i riferimenti alle entità appena create.

Se l'entità corrispondente non è definita in DocumentType quando viene aggiunto il nodo di riferimento all'entità, poiché il riferimento all'entità non è definito, l'unico nodo figlio sarà un nodo di testo vuoto.

Le entità predefinite amp, lt, gt, apos e quot sono consentite e avranno un nodo di testo figlio con il valore di carattere espanso appropriato.

Anche se questo metodo crea il nuovo oggetto nel contesto del documento, non aggiunge automaticamente il nuovo oggetto all'albero del documento. Per aggiungere il nuovo oggetto, è necessario chiamare in modo esplicito uno dei metodi di inserimento del nodo.

In base alla raccomandazione W3C Extensible Markup Language (XML) 1.0, i nodi EntityReference sono consentiti solo all'interno di nodi Element, Attribute e EntityReference.

Si applica a