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 de Propriedade

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

Exceções

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

Observações

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

InnerXml remove declarações redundantes de namespace. Como resultado, várias operações de recortar e colar não aumentam o tamanho do documento com declarações de namespace redundantes. 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ó da folha de estilos devolve a seguinte string:

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

Note a declaração adicional do espaço de nomes xmlns:xsl que é usada para preservar a identidade do nó. Se voltares a inserir esta cadeia XML interna, vais recuperar o teu documento original. Por outras palavras, InnerXml reconhece que a declaração do espaço de nomes xmlns:xsl é redundante, dado que o elemento pai xsl:stylesheet já tem a declaração do espaço de nomes xmlns:xsl, e por isso remove-a.

Se mudares InnerXml de um documento sem namespace por defeito para um documento com um namespace por defeito, o comportamento é um pouco diferente. Considere a seguinte cadeia XML:

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

InnerXml devolve uma string XML simples sem declarações de namespace:

<item>123</item>

Se depois inserir esta cadeia num documento que tenha um namespace predefinido, como o seguinte:

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

InnerXml analisa a cadeia em contexto, e os novos nós captam o namespace urn:1. O resultado é assim:

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

Agora, quando pedir o InnerXml pedido, recebe o seguinte:

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

Se quiser explicitamente que o item inserido preserve o facto de ter vindo de um documento que não tinha namespace, então precisa de adicionar manualmente uma declaração xmlns= "" e inserir a cadeia resultante:

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

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

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

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

  3. Declarações xmlns:XSL aparecem automaticamente nas suas cadeias e desaparecem nas hierarquias dos nós.

  4. No caso de mudar InnerXml de um documento que não tem namespace por defeito para um documento que tem um namespace por defeito, os novos nós irão apanhar o novo namespace predefinido.

Se InnerXml estiver definido com texto contendo referências de entidades que não estão atualmente definidas no documento, a árvore resultante conterá nós vazios de ReferênciaEntidade.

Esta propriedade é uma extensão da Microsoft para o Modelo de Objetos do Documento (DOM).

Aplica-se a