import java.util.*;
import org.dom4j.VisitorSupport;
import org.dom4j.dom.DOMDocument;
import org.jdom.input.DOMBuilder;public class aaa {
public static void main(String[] args) throws Exception { StringBuffer sb = new StringBuffer();
sb.append("<p><img height=\"550\" src=\"/test/test.jpg\" /></p>");
sb.append("<html><body>test<font><button></body></html>");
sb.append("<table width=\"200\"><tr><td>aaaa</td></tr></table>");
sb.append("<script>alert('aaa')</script>"); org.dom4j.dom.DOMDocument ds = getDoc()//该方法可以获取DOMDocument org.dom4j.Element root = ds.getRootElement();
getElementList(root); } public static void getElementList(org.dom4j.Element element) {
List elements = element.elements();
if (elements.size() == 0) {
// 没有子元素
String xpath = element.getPath();
String value = element.getTextTrim();
String value2 = element.getName();
//System.out.println("ai=1=" + value);
System.out.println("ai=2=" + value2);
} else {
System.out.println("55");
// 有子元素
for (Iterator it = elements.iterator(); it.hasNext();) {
org.dom4j.Element elem = (org.dom4j.Element) it.next();
// 递归遍历
getElementList(elem);
}
}
}}
我想遍历这个dom的全部节点以及属性,然后把script节点去掉,然后把img 节点的height属性去掉
然后返回一个新的string
!可是我<p> <body> <table>这些节点都遍历不出来不知道是不是我那里写错了
希望返回结果就是 sb.append("<p><img src=\"/test/test.jpg\" /></p>");
sb.append("<html><body>test<font><button></body></html>");
sb.append("<table width=\"200\"><tr><td>aaaa</td></tr></table>");
然后返回一个新的string 如果你想“把script节点去掉,然后把img 节点的height属性去掉
然后返回一个新的string ”用xpath就可以了,很方便,没必要遍历所有的节点public static void getElementList(org.dom4j.Element element) {
List elements = element.elements();
if (elements.size() == 0) {
// 没有子元素
String xpath = element.getPath();
String value = element.getTextTrim();
String value2 = element.getName();
//System.out.println("ai=1=" + value);
System.out.println("ai=2=" + value2);
} else {
System.out.println("55");
// 有子元素
for (Iterator it = elements.iterator(); it.hasNext();) {
org.dom4j.Element elem = (org.dom4j.Element) it.next();
// 递归遍历
getElementList(elem);
}
}
}改成public static void getElementList(org.dom4j.Element element) {
// 没有子元素
String xpath = element.getPath();
// String value = element.getTextTrim();
String value2 = element.getName();
//System.out.println("ai=1=" + value);
System.out.println("ai=2=" + value2);
List elements = element.elements();
if (elements.size() != 0) {
System.out.println("55");
// 有子元素
for (Iterator it = elements.iterator(); it.hasNext();) {
org.dom4j.Element elem = (org.dom4j.Element) it.next();
// 递归遍历
getElementList(elem);
}
}
}无论节点有没有子节点都要输出节点本身,你原来那样写有子节点的节点直接执行else部分不会输出自己,自己用eclipse debug一下很容易看出问题的