修改 XML 文档中的节点、内容和值
有多种方法可以修改文档中的节点和内容。 您可以:
使用 Value 属性更改节点的值。
通过用新节点替换节点来修改全部节点集。 此操作使用 InnerXml 属性完成。
使用 RemoveChild 方法用新节点替换现有节点。
使用 AppendData、InsertData 或 ReplaceData 方法向从 XmlCharacterData 类继承的节点添加附加字符。
通过在从 XmlCharacterData 继承的节点类型上使用 DeleteData 方法移除某个范围的字符,以修改内容。
更改节点值的一个简单方法是使用 node.Value = "new value";。 下表列出了此单个代码行作用于的节点类型,以及对于该节点类型将更改的确切数据。
节点类型 |
更改的数据 |
---|---|
Attribute |
属性的值。 |
CDATASection |
CDATA 节的内容。 |
Comment |
注释的内容。 |
ProcessingInstruction |
内容(不包括目标)。 |
Text |
文本的内容。 |
XmlDeclaration |
声明的内容,不包括 <?xml 和 ?> 标记。 |
Whitespace |
空白的值。 可以将该值设置为四个可识别的 XML 空白字符之一:空格、制表符、CR 或 LF。 |
SignificantWhitespace |
有效空白的值。 可以将该值设置为四个可识别的 XML 空白字符之一:空格、制表符、CR 或 LF。 |
该表中未列出的任何节点类型都不是设置了值的有效节点类型。 设置任何其他节点类型的值都将引发 InvalidOperationException。
InnerXml 属性更改当前节点的子节点标记。 设置此属性将用给定字符串的分析内容替换子节点。 分析在当前命名空间上下文中完成。 此外,InnerXml 移除多余的命名空间声明。 因此,大量的剪切和粘贴操作并不会使文档的大小因多余的命名空间声明而增加。 有关显示命名空间对 InnerXml 操作的影响的代码示例,请参见 InnerXml 属性。
当使用 ReplaceData 和 RemoveChild 方法时,这两个方法返回已替换或移除的节点。 此节点可以重新插入 XML 文档对象模型 (DOM) 中的任何其他位置。 ReplaceData 方法对插入到文档中的节点执行两个验证检查。 第一个检查确保该节点成为某个节点的子级,这个节点可具有其类型的子节点。 第二个检查确保插入的节点不是它成为其子级的节点的上级。 违犯这两个条件中的任何一个都将引发 InvalidOperationException。
向可编辑的节点中添加或从中移除只读子级是有效的。 然而,试图修改只读节点本身将引发 InvalidOperationException 异常。 修改 XmlEntityReference 节点的子级便属于这种情况。 该子级是只读的,因此无法修改。 任何修改它们的尝试都将引发 InvalidOperationException。