XmlDocument.InnerXml Propriedade

Definição

Obtém ou define a marcação que representa os filhos do nó atual.

public:
 virtual property System::String ^ InnerXml { System::String ^ get(); void set(System::String ^ value); };
public override string InnerXml { get; set; }
member this.InnerXml : string with get, set
Public Overrides Property InnerXml As String

Valor da propriedade

String

A marcação dos filhos do nó atual.

Exceções

O XML especificado ao definir essa propriedade não está bem formado.

Comentários

Definir essa propriedade substitui os filhos do nó pelo conteúdo analisado da cadeia de caracteres fornecida. A análise é feita no contexto do namespace atual.

InnerXml remove declarações de namespace redundantes. Como resultado, várias operações de recortar e colar não aumentam o tamanho do documento com declarações redundantes de namespace. Considere o seguinte documento XSL:

<xsl:stylesheet version="1.0"   
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
     <xsl:template match="stock">  
         ...  
     </xsl:template>  
    </xsl:stylesheet>  

A InnerXml propriedade no nó folha de estilos retorna a seguinte cadeia de caracteres:

<xsl:template match="stock"   
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
     ...  
    </xsl:template>  

Observe a declaração de namespace xmlns:xsl adicional que é usada para preservar a identidade do nó. Se você inserir novamente essa cadeia de caracteres XML interna, você receberá de volta o documento original. Em outras palavras, InnerXml reconhece que a declaração de namespace xmlns:xsl é redundante, considerando que o elemento pai xsl:stylesheet já tem a declaração de namespace xmlns:xsl e, portanto, a remove.

Se você passar InnerXml de um documento sem namespace padrão para um documento com um namespace padrão, o comportamento será um pouco diferente. Considere a seguinte cadeia de caracteres XML:

<test>  
      <item>123</item>  
    </test>  

InnerXml retorna uma cadeia de caracteres XML simples sem declarações de namespace:

<item>123</item>  

Se você inserir essa cadeia de caracteres em um documento que tenha um namespace padrão, como o seguinte:

<test2 xmlns="urn:1">  
    </test>  

InnerXml analisa a cadeia de caracteres no contexto e os novos nós captam o namespace urn:1. O resultado será semelhante a este:

<test2 xmlns="urn:1">  
      <item>123</item>  
    </test>  

Agora, quando você pedir o InnerXml seguinte, você receberá de volta o seguinte:

<item xmlns="urn:1">123</item>  

Se você quiser explicitamente que o item inserido preserve o fato de que ele veio de um documento que não tinha namespace, será necessário adicionar manualmente uma declaração xmlns= "" e inserir a cadeia de caracteres resultante:

<item xmlns="">123</item>  

O efeito líquido de tudo isso é o seguinte:

  1. Cortar e colar InnerXml entre documentos que não usam namespaces é limpo e simples e não cria redundância "xmlns" em suas cadeias de caracteres.

  2. InnerXml também pode ser usado para recortar e colar entre documentos que têm mais de um namespace (ou seja, folhas de estilo XSL).

  3. As declarações xmlns:xsl aparecem automaticamente em suas cadeias de caracteres e desaparecem nas hierarquias do nó.

  4. No caso em que você estiver migrando InnerXml de um documento sem namespace padrão para um documento que tenha um namespace padrão, os novos nós pegarão o novo namespace padrão.

Se InnerXml for definido com texto contendo referências de entidade que não estão definidas no momento no documento, a árvore resultante conterá nós de EntityReference vazios.

Essa propriedade é uma extensão da Microsoft do DOM (Modelo de Objeto do Documento).

Aplica-se a