Поделиться через


XmlDocument.InnerXml Свойство

Определение

Возвращает или задает разметку, отражающую дочерние узлы текущего узла.

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

Значение свойства

Разметка дочерних узлов текущего узла.

Исключения

Формат XML, указанный при задании этого свойства, является неправильным.

Комментарии

При задании этого свойства дочерние элементы узла заменяются проанализированным содержимым заданной строки. Синтаксический анализ выполняется в контексте текущего пространства имен.

InnerXml удаляет объявления избыточных пространств имен. В результате после многочисленных операций вырезания и вставки размер документа не будет увеличиваться за счет избыточных деклараций пространств имен. Рассмотрим следующий документ XSL:

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

Свойство InnerXml в узле таблицы стилей возвращает следующую строку:

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

Обратите внимание на дополнительное объявление пространства имен xmlns:xsl, которое используется для сохранения удостоверения узла. При повторной вставке этой внутренней XML-строки вы вернетесь к исходному документу. Другими словами, распознает, InnerXml что объявление пространства имен xmlns:xsl является избыточным, учитывая, что родительский элемент xsl:stylesheet уже имеет объявление пространства имен xmlns:xsl, и, следовательно, удаляет его.

При переходе InnerXml от документа без пространства имен по умолчанию к документу с пространством имен по умолчанию поведение немного отличается. Рассмотрим следующую XML-строку:

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

InnerXml возвращает обычную СТРОКУ XML без объявлений пространства имен:

<item>123</item>

Если затем вставить эту строку в документ с пространством имен по умолчанию, например:

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

InnerXml анализирует строку в контексте, и новые узлы выбирают пространство имен urn:1. Результат имеет следующий вид:

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

Теперь при запросе InnerXml вы получите следующее:

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

Если вы явно хотите, чтобы вставленный элемент сохранял тот факт, что он получен из документа без пространства имен, необходимо вручную добавить объявление xmlns= "" и вставить результирующую строку:

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

Результат всего этого выглядит следующим образом:

  1. Вырезание и вставка InnerXml документов, не использующих пространства имен, является чистой и простой и не создает избыточность xmlns в строках.

  2. InnerXml также можно использовать для выреза и вставки между документами, имеющими несколько пространств имен (то есть таблицы стилей XSL).

  3. Объявления xmlns:xsl автоматически отображаются в строках и исчезают в иерархиях узлов.

  4. При переходе InnerXml из документа, не у которого нет пространства имен по умолчанию, к документу с пространством имен по умолчанию, новые узлы будут использовать новое пространство имен по умолчанию.

Если InnerXml задан текст, содержащий ссылки на сущности, которые в настоящее время не определены в документе, результирующее дерево будет содержать пустые узлы EntityReference.

Это свойство является расширением Microsoft для объектной модели документа (DOM).

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