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-строки вы вернетесь к исходному документу. Иными словами, распознает, что объявление пространства имен xmlns:xsl является избыточным, учитывая, InnerXml что родительский элемент 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.

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

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