XML ドキュメントのノード、コンテンツ、値の変更

ドキュメントのノードおよびコンテンツを変更するには、さまざまな方法があります。 次の操作を行うことができます。

  • Value プロパティを使用してノードの値を変更する。

  • ノードを新しいノードに置き換えることにより、ノード セット全体を変更します。 これは InnerXml プロパティを使用して実行できます。

  • RemoveChild メソッドを使用して既存のノードを新しいノードに置き換える。

  • XmlCharacterDataAppendData、または InsertData メソッドを使用して ReplaceData クラスから継承した追加の文字をノードに追加する。

  • DeleteData から継承したノード型に対し、XmlCharacterData メソッドを使用することにより、文字範囲を削除してコンテンツを変更する。

ノードの値を簡単に変更するには、node.Value = "new value"; を使用します。 この 1 行のコードを実行できるノード型と、そのノード型で変更されるデータを次の表に示します。

ノード型 変更されるデータ
属性 属性の値。
CDATASection CDATASection のコンテンツ。
コメント コメントの内容。
ProcessingInstruction ターゲットを除くコンテンツ。
テキスト テキストのコンテンツ。
XmlDeclaration <?xml?> のマークアップを除く、宣言のコンテンツ。
Whitespace 空白の値。 この値は、スペース、タブ、CR、LF という 4 つの認識可能 XML 空白文字のいずれかに設定できます。
SignificantWhitespace 有意の空白の値。 この値は、スペース、タブ、CR、LF という 4 つの認識可能 XML 空白文字のいずれかに設定できます。

この表に記載されていないノード型は、値を設定できるノード型ではありません。 これら以外のノード型に値を設定すると、InvalidOperationException がスローされます。

InnerXml プロパティによって、現在のノードの子ノードのマークアップを変更できます。 このプロパティを設定すると、指定した文字列から解析されたコンテンツで子ノードが置き換えられます。 文字列の解析は、現在の名前空間コンテキストで実行されます。 さらに、InnerXml は冗長な名前空間宣言を削除します。 この結果、カット アンド ペースト操作を何度も実行しても、冗長な名前空間宣言によってドキュメント サイズが増加することはありません。 InnerXmlの操作における名前空間の影響を示すコード サンプルについては、「InnerXml」を参照してください。

ReplaceData メソッドと RemoveChild メソッドを使用すると、これらのメソッドによって置換または削除されたノードが返されます。 このノードは XML ドキュメント オブジェクト モデル (DOM) のどこかに再度挿入することができます。 ReplaceData メソッドは、ドキュメントに挿入されるノードに対し、2 種類の検証チェックを実行します。 最初のチェックでは、そのノードの親となるノードが、挿入されるノード型の子ノードを持つことができるかどうかを確認します。 2 番目のチェックでは、挿入されるノードが、その親となるノードの祖先でないことを確認します。 これらの条件のいずれかに違反すると、InvalidOperationException がスローされます。

編集可能なノードに読み取り専用の子を追加したり、削除したりするのは有効な操作です。 しかし、読み取り専用のノードそのものを変更しようとすると、InvalidOperationException がスローされます。 この一例として、XmlEntityReference ノードの子を変更しようとした場合が当てはまります。 このノードの子は読み取り専用であり、変更できません。 それらを変更しようとすると、InvalidOperationException がスローされます。

関連項目