XML ドキュメントのノード、コンテンツ、値の変更
ドキュメントのノードおよびコンテンツを変更するには、さまざまな方法があります。 次の操作を行うことができます。
Value プロパティを使用してノードの値を変更する。
ノードを新しいノードに置き換えることにより、ノード セット全体を変更します。 これは InnerXml プロパティを使用して実行できます。
RemoveChild メソッドを使用して既存のノードを新しいノードに置き換える。
XmlCharacterData、AppendData、または 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 がスローされます。
関連項目
.NET