特定のタグを消したい
2012/12/10
dom
java
xml
Javaです。
「XMLから特定のタグだけを消して、その子のノードはそのままにしたい」
順繰りみていきながら、特定のタグで特定なクラス名だけを削除するという実装にしています。
むずかしかったのはその子の要素をそのままにしたいので、子のクローンを用意して、消したいノードの場所に次々と足すということをしています。気がついたらなるほどねということのなのでしょうけども。
はじめ子のクローンでなくそのもので足していたったら、JVMがぽこーんと落ちたので(正確には、JavaFXの上のHTMLEditorなのですが) ようやくクローンしないといけないことに気がついたのでした。
/**
*
* @param document
* @param rootNode
* @param tag
* @param className
*/
public static void removeNodeByTagNameAndClassName(Document document, Node rootNode, String tag,
String className) {
NodeList nodeList = rootNode.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
removeNodeByTagNameAndClassName(document, node, tag, className);
if (Node.ELEMENT_NODE == node.getNodeType()) {
Element element = (Element) node;
Attr attr = element.getAttributeNode("class");
if (element.getTagName().toUpperCase()
.equals(tag.toUpperCase())
&& attr != null && attr.getValue().equals(className)) {
NodeList nodeList2 = element.getChildNodes();
Node parent = element.getParentNode();
for (int j = 0; j < nodeList2.getLength(); j++) {
Node newChild = nodeList2.item(j).cloneNode(true);
parent.insertBefore(newChild, element);
}
parent.removeChild(element);
}
}
}
}
: