---
/**
* <code>org.w3c.dom</code>の子要素を残して自身を削除できるか。
* @throws Exception
*/
@Test
public void testNonMethod_InsertBeforeChildNodes() throws Exception{
String xml = "<html><head/><body><h1>クラス Pattern</h1><span class=\"normal\">コンパイル済みの正規表現です。</span>" +
"<h1>クラス Matcher</h1><span class=\"normal\">マッチ操作を行うエンジンです。</span></body></html>";
Document doc = DomUtils.stringToDocument(xml);
//span要素を削除して、span要素の子孫は残します。
NodeList nodeList = DomUtils.findNodesByXPath(doc, "//*");
for(int i=0;i<nodeList.getLength();i++){
Node node = nodeList.item(i);
if(node.getNodeType() == Node.ELEMENT_NODE && node.getNodeName().equals("span")){
//親を呼び出します。
Node parent = node.getParentNode();
NodeList childNodes = node.getChildNodes();
//ノードの挿入は親に頼みます。
for(int j=0; j < childNodes.getLength(); j++){
Node child = childNodes.item(j).cloneNode(true); //修正
parent.insertBefore(child, node);
}
parent.removeChild(node);
}
}
String actual = DomUtils.nodeToString(doc);
System.out.println(actual);
}
---
出力結果
---
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h1>クラス Pattern</h1>コンパイル済みの正規表現です。
<h1>クラス Matcher</h1>マッチ操作を行うエンジンです。
</body>
</html>
---
ではまた。
修正:
誤)Node child = childNodes.item(j);
正)Node child = childNodes.item(j).cloneNode(true);
修正:
誤)Node child = childNodes.item(j);
正)Node child = childNodes.item(j).cloneNode(true);
0 件のコメント:
コメントを投稿