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 节点。

此属性是文档对象模型 (DOM) 的 Microsoft 扩展。

适用于