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>");

解决方案 »

  1.   

    不晓得你那个 getElementList 方法是在干什么。
      

  2.   

    你这个文档不是一个合理的xml,根本不具备跟元素啊。
      

  3.   

    你先打印出你的xml,估计是你的xml不规范造成的
      

  4.   

    我想遍历这个dom的全部节点以及属性,然后把script节点去掉,然后把img 节点的height属性去掉
    然后返回一个新的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一下很容易看出问题的
      

  5.   

    你要实现功能的话正则表达式就可以了,不需要用dom4j
      

  6.   

    用遍历得到每个元素及其子节点的属性,或者值,判断是否等于script,img,采取相应的操作。
      

  7.   

    同意!不管你想匹配什么,这个XML似乎连根元素都没有
      

  8.   

    getDoc()//该方法可以获取DOMDocument 这个方法会把根元素社么的都做好的作成规范的xml啊
      

  9.   

    非要用dome4j吗.不愿用dom 或sax吗