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>
Результат всего этого выглядит следующим образом:
Вырезание и вставка
InnerXml
документов, не использующих пространства имен, является чистой и простой и не создает избыточность xmlns в строках.InnerXml
также можно использовать для выреза и вставки между документами, имеющими несколько пространств имен (то есть таблицы стилей XSL).Объявления xmlns:xsl автоматически отображаются в строках и исчезают в иерархиях узлов.
При переходе
InnerXml
из документа, не у которого нет пространства имен по умолчанию, к документу с пространством имен по умолчанию, новые узлы будут использовать новое пространство имен по умолчанию.
Если InnerXml
задан текст, содержащий ссылки на сущности, которые в настоящее время не определены в документе, результирующее дерево будет содержать пустые узлы EntityReference.
Это свойство является расширением Microsoft для объектной модели документа (DOM).