dom4j 将doc作为 asXml 输出的话,会自动把格式排好。

解决方案 »

  1.   

    只想要节点名字。
    顶!
    今天用了 
    public void treeWalk(Document document) {
            treeWalk( document.getRootElement() );
        }    public void treeWalk(Element element) {
            for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
                Node node = element.node(i);
                if ( node instanceof Element ) {
                    treeWalk( (Element) node );
                }
                else {
                    // do something....
                }
            }
        }
    这个递归方法,发现遍历出来的节点名字都是重复的
      

  2.   

    取决于你的文件结构。
    用递归取name的名字,判断是否有子节点就可以了。
    有方法可以取子节点和父节点的
      

  3.   

    dom4j 已经成为历史了,现在java操作xml应该使用jdom,它的便捷性要强得多,下面是jdom一些常用方法简介:
    一、准备
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.input.SAXBuilder;①
    String path = xml文档路径;

    SAXBuilder builder = new SAXBuilder();
    Document doc = builder.build(path);
    ③得到根节点:
    Element e = doc.getRootElement();
    ⑤⑥⑦⑧⑨
    二、操作
    (1)读取
    1、
    ①得到指定子节点:
    e.getChild("节点名");
    ②得到指定子节点内容:
    e.getChild(节点名).getValue();

    e.getChildText(节点名);
    ③得到指定属性值:
    e.getAttributeValue(属性名);
    ④遍历子节点:
    java.util.List l = e.getChildren();    //得到所有子节点列

    java.util.List l = e.getChildren();    //得到指定名字的子节点列
    遍历:
            for (int i=0; i<l.size(); i++) {
                Element e2 = (Element)l.get(i);
                ArrayList tl = new ArrayList();
                tl.add(e2.getChildText("url"));
                tl.add(e2.getChildText("sm"));
                list.add(tl);
            }(2)编辑
    e.getChild(节点名).setText(内容);(3)添加
    ①新建节点
    Element newE = new Element(节点名);
    Element sm = new Element(节点名);
    ②为节点添加内容
    sm.addContent(内容);
    ③将一个节点加入另一个节点
    newE.addContent(sm);
    root.addContent(newE);
    ④为节点添加属性及值
    newE.setAttribute("id",id);(4)删除
    删除当前节点:
    e.getParentElement().removeContent(e);三、写文件
    import org.jdom.output.Format;
    import org.jdom.output.XMLOutputter;XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat().setEncoding("gb2312"));    //设制编码为gb2312以写入中文
    java.io.OutputStream outStream = new java.io.FileOutputStream(path);
    outputter.output(doc, outStream);
    outStream.flush();
    outStream.close();