private
boolean isCDATA(org.dom4j.Node node) {
if(!node.hasContent()) return false;
Iterator iterator = ((Branch)node).content().iterator();
while(iterator.hasNext()) {
org.dom4j.Node n = (org.dom4j.Node)iterator.next();
if (org.w3c.dom.Node.CDATA_SECTION_NODE == n.getNodeType()) {
return true;
}
}
return false;
}
if(!node.hasContent()) return false;
Iterator iterator = ((Branch)node).content().iterator();
while(iterator.hasNext()) {
org.dom4j.Node n = (org.dom4j.Node)iterator.next();
if (org.w3c.dom.Node.CDATA_SECTION_NODE == n.getNodeType()) {
return true;
}
}
return false;
}
使用上面的代码可以识别一个指定节点的元素是否包含CDATA。
但是,需要注意的是,CDATA_SECTION_NODE隶属于TEXT.NODE类型,因此须有
……
if(stringElem.isTextOnly()){
if(isCDATA(stringElem)){
stringElem.clearContent();
stringElem.addCDATA(replacement);
}
else stringElem.setText(replacement);
}
else{
stringElem.clearContent();
stringElem.setText(replacement);
}
……
if(stringElem.isTextOnly()){
if(isCDATA(stringElem)){
stringElem.clearContent();
stringElem.addCDATA(replacement);
}
else stringElem.setText(replacement);
}
else{
stringElem.clearContent();
stringElem.setText(replacement);
}
……
转载于:https://blog.51cto.com/zorro/804784