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