ドキュメントのノードおよびコンテンツを変更するには、さまざまな方法があります。次の操作を行うことができます。
- XmlNode.Value メソッドを使用してノードの値を変更します。
- ノードを新しいノードに置き換えることにより、ノード セット全体を変更します。これは、XmlNode.InnerXml プロパティによって実行できます。
- XmlNode.ReplaceChild メソッドを使用して既存のノードを新しいノードに置き換えます。
- XmlCharacter.AppendData メソッド、XmlCharacter.InsertData メソッド、または XmlCharacter.ReplaceData メソッドを使用して、XmlCharacter クラスから継承するノードに文字を追加します。
- XmlCharacterData から継承するノード タイプに対し、DeleteData メソッドを使用することにより、文字の範囲を削除してコンテンツを変更します。
- SetAttribute メソッドを使用して属性の値を更新します。SetAttribute は、属性が存在しない場合には新しい属性を作成し、属性が存在する場合には属性の値を更新します。
ノードの値を簡単に変更するには、node.Value = "new value";
を使用します。この 1 行のコードを実行できるノード タイプと、そのノード タイプで変更されるデータを次の表に示します。
ノード タイプ | 変更されるデータ |
---|---|
Attribute | 属性の値。 |
CDATASection | CDATASection のコンテンツ。 |
Comment | コメントのコンテンツ。 |
ProcessingInstruction | ターゲットを除くコンテンツ。 |
Text | テキストのコンテンツ。 |
XmlDeclaration | <?xml と ?> のマークアップを除く、宣言のコンテンツ。 |
Whitespace | 空白の値。この値は、認識される 4 つの XML 空白文字 (空白、タブ、CR、LF) のいずれかに設定できます。 |
SignificantWhitespace | 有意の空白の値。この値は、認識される 4 つの XML 空白文字 (空白、タブ、CR、LF) のいずれかに設定できます。 |
この表に記載されていないノード タイプは、値を設定できるノード タイプではありません。これら以外のノード タイプに値を設定すると、InvalidOperationException がスローされます。
InnerXml プロパティによって、現在のノードの子ノードのマークアップを変更できます。このプロパティを設定すると、指定した文字列から解析されたコンテンツで子ノードが置き換えられます。文字列の解析は、現在の名前空間コンテキストで実行されます。さらに、InnerXml は冗長な名前空間宣言を削除します。この結果、カット アンド ペースト操作を何度も実行しても、冗長な名前空間宣言によってドキュメント サイズが増加することはありません。InnerXml の操作における名前空間の影響を示すコード例については、「InnerXml プロパティ」を参照してください。
ReplaceChild メソッドや RemoveChild メソッドを使用すると、これらのメソッドによって置換または削除されたノードが返されます。返されたノードは、DOM の別の場所に再挿入できます。ReplaceChild メソッドは、ドキュメントに挿入されるノードに対し、2 種類の検証チェックを実行します。最初のチェックでは、そのノードの親となるノードが、挿入されるノード タイプの子ノードを持つことができるかどうかを確認します。2 番目のチェックでは、挿入されるノードが、その親となるノードの先祖でないことを確認します。これらの条件のいずれかに違反すると、InvalidOperationException 例外がスローされます。
編集可能なノードに読み取り専用の子を追加したり、削除するのは有効な操作です。しかし、読み取り専用のノードそのものを変更しようとすると、InvalidOperationException 例外がスローされます。この一例として、XmlEntityReference ノードの子を変更しようとした場合が当てはまります。このノードの子は読み取り専用であり、変更できません。それらを変更しようとすると、InvalidOperationException がスローされます。