XmlDocument.CreateEntityReference(String) Метод

Определение

Создает объект XmlEntityReference с указанным именем.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

Параметры

name
String

Имя ссылки на сущность.The name of the entity reference.

Возвраты

Новый объект XmlEntityReference.The new XmlEntityReference.

Исключения

Недопустимое имя (например, имена, начинающиеся с символа "#", являются недопустимыми.)The name is invalid (for example, names starting with'#' are invalid.)

Примеры

В следующем примере показано создание двух узлов ссылки на сущность и их вставка в 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

Комментарии

Если известна сущность, на которую указывает ссылка, дочерний список XmlEntityReference узла становится таким же, как и у соответствующего XmlEntity узла.If the referenced entity is known, the child list of the XmlEntityReference node is made the same as that of the corresponding XmlEntity node.

Пространства имен, используемые в замещающем тексте для ссылки на сущность, привязываются во время первого задания родителя узла ссылки на сущность (например, при вставке узла ссылки на сущность в документ).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). Например, при наличии следующей сущности:For example, given the following entity:

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

При вызове CreateEntityReference("a") вы получаете один узел типа EntityReference без дочерних элементов.If you call CreateEntityReference("a") you get back a single node of type EntityReference with no children. Если добавить этот узел в качестве дочернего для следующего узла,If you append this node as a child of the following node,

<item xmlns="urn:1"/>  

затем во время вызова AppendChildустанавливается родительский элемент созданного узла ссылки на сущность, и дочерние элементы развертываются в этом контексте пространства имен.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. У узла b дочернего элемента будет значение NamespaceURI urn:1, равное.The child element node b will have NamespaceURI equal to urn:1. Дочерние узлы ссылки на сущность остаются неизменными даже при перемещении ссылки на сущность в место документа с другим контекстом пространства имен по умолчанию.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. Это не происходит для существующих узлов ссылок на сущности при их удалении и вставке или для ссылок на сущности, которые были CloneNodeклонированы с помощью.This does not happen for existing entity reference nodes when you remove and insert them or for entity references that you clone with CloneNode. Это происходит только для вновь созданных ссылок на сущности.It only happens for newly created entity references.

Если соответствующая сущность не определена в DocumentType при добавлении узла ссылки на сущность, так как ссылка на сущность не определена, его единственный дочерний узел будет пустым текстовым узлом.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.

Также допускаются встроенные сущности amp, lt, gt, apos и quot, и они будут иметь дочерний текстовый узел с соответствующим значением расширенного символа.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.

Несмотря на то, что этот метод создает новый объект в контексте документа, он не добавляет новый объект автоматически в дерево документов.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. Чтобы добавить новый объект, необходимо явным образом вызвать один из методов вставки узла.To add the new object, you must explicitly call one of the node insert methods.

В соответствии с рекомендацией консорциума W3C язык XML (XML) 1,0узлы EntityReference разрешены только в узлах элементов, атрибутов и EntityReference.According to the W3C Extensible Markup Language (XML) 1.0 recommendation, EntityReference nodes are only allowed within Element, Attribute and EntityReference nodes.

Применяется к