XML DOM ノード削除

removeChild()メソッドは指定されたノードを削除します。

removeAttribute()メソッドは指定された属性を削除します。

以下の例では、XMLファイルを使用します books.xml

関数 loadXMLDoc()、外部のJavaScriptに位置して、XMLファイルをロードするために使用されます。

要素ノードを削除します
この例では、removeChild()を使用して最初の<book>要素を削除します。
現在の要素ノードを削除します
この例では、parentNodeとremoveChild()を使用して現在の<book>要素を削除します。
テキストノードを削除
この例では、removeChild()を使用して最初の<title>要素のテキストノードを削除します。
テキストノードのテキストを空にします
この例では、nodeValue()属性を使用して最初の<title>要素のテキストノードを空にします。
名前に基づいて属性を削除します
この例では、removeAttribute()を使用して最初の<book>要素から"category"属性を削除します。
オブジェクトに基づいて属性を削除します
この例では、removeAttributeNode()を使用して<book>要素のすべての属性を削除します。

要素ノードを削除します

removeChild()メソッドは指定されたノードを削除します。

ノードが削除されると、そのすべての子ノードも削除されます。

以下のコードスニペットは、読み込んだ xmlから最初の<book>要素を削除します:

xmlDoc=loadXMLDoc("books.xml");
y=xmlDoc.getElementsByTagName("book")[0];
xmlDoc.documentElement.removeChild(y); 

例を説明します:

  • 使用して loadXMLDoc() " をbooks.xml" xmlDoc に読み込みます
  • 変数yを削除する要素ノードに設定します。
  • removeChild()メソッドを使用して、親ノードから要素ノードを削除します。

TIY

自身を削除 - 現在のノードを削除

removeChild()メソッドは、指定されたノードを削除するための唯一の方法です。

必要なノードを定位したら、parentNode属性とremoveChild()メソッドを使用して、このノードを削除できます:

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.getElementsByTagName("book")[0];
x.parentNode.removeChild(x); 

例を説明します:

  • 使用して loadXMLDoc() " をbooks.xml" xmlDoc に読み込みます
  • 変数yを削除する要素ノードに設定します。
  • parentNode属性とremoveChild()メソッドを使用して、この要素ノードを削除します。

TIY

テキストノードを削除

removeChild()メソッドは、テキストノードを削除するために使用できます:

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.getElementsByTagName("title")[0];
y=x.childNodes[0];
x.removeChild(y); 

例を説明します:

  • 使用して loadXMLDoc() " をbooks.xml" xmlDoc に読み込みます
  • 変数xを最初のtitle要素ノードに設定します。
  • 変数yを削除するテキストノードに設定します。
  • removeChild()メソッドを使用して、親ノードからノードを削除します。

TIY

あまり使われないremoveChild()は、ノードからテキストを削除するために使用されます。nodeValue属性で代用できます。次のセクションを見てください。

テキストノードを空にする

nodeValue属性は、テキストノードの値を変更したり空にしたりするために使用できます:

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.getElementsByTagName("title")[0].childNodes[0];
x.nodeValue=""; 

例を説明します:

  • 使用して loadXMLDoc() " をbooks.xml" xmlDoc に読み込みます
  • 変数xを最初のtitle要素のテキストノードに設定します。
  • nodeValue属性を使用してテキストノードのテキストを空にします。

TIY

すべての<title>要素のテキストノードをループして変更します:TIY

名前に基づいて属性ノードを削除

removeAttribute(name)メソッドは、名前に基づいて属性ノードを削除するために使用されます。

例: removeAttribute('category')

以下のコードスニペットは、最初の<book>要素から"category"属性を削除します:

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.getElementsByTagName("book");
x[0].removeAttribute("category"); 

例を説明します:

  • 使用して loadXMLDoc() " をbooks.xml" xmlDoc に読み込みます
  • getElementsByTagName()を使用してbookノードを取得します。
  • 最初の book ノードから "category" 属性を削除します

TIY

すべての <book> ノードの "category" 属性を削除します:TIY。

オブジェクトに基づいて属性ノードを削除します

removeAttributeNode(node) メソッドは、Node オブジェクトをパラメータとして使用して属性ノードを削除します。

例: removeAttributeNode(x)

以下のコードスニペットは、すべての <book> ノードの属性を削除します:

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.getElementsByTagName("book");
for (i=0;i<x.length;i++)
{
while (x[i].attributes.length>0)
  {
  attnode=x[i].attributes[0];
  old_att=x[i].removeAttributeNode(attnode);
  }
}

例を説明します:

  • 使用して loadXMLDoc() " をbooks.xml" xmlDoc に読み込みます
  • getElementsByTagName() を使用してすべての book ノードを取得します
  • 各 book 要素が属性を持っているか確認します
  • ある book 要素に属性が存在する場合、その属性を削除します

TIY