这样写正确吗(用一递归):a(Node myNode){
for(int i=0;i<myNode.getChildNodes().getLength();i++){
System.out.println("写入:"+mynod.getChildNodes().item(i).getNodeName());a(myNode.getChildNodes().item(i));
}

解决方案 »

  1.   

    package com.strawbingo.xml.dom4j;import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.Attribute;
    import java.util.List;
    import java.util.Iterator;
    import org.dom4j.io.XMLWriter;import java.io.*;
    import java.net.MalformedURLException;import org.dom4j.DocumentException;
    import org.dom4j.io.SAXReader; 
    /*
     * 用DOM4J遍历XML,并打印
     * 
     * @author liub 20060810
     */public class Dom4jEcho {


    private void readXml(String fileName) throws Exception{

    Document doc = read(fileName);
    Element root = getRootElement(doc);
    readAllEle(root);

    }

        // 从文件读取XML,输入文件名,返回XML文档
        public Document read(String fileName) throws MalformedURLException, DocumentException {
           SAXReader reader = new SAXReader();
           Document document = reader.read(new File(fileName));
           return document;
        }
        
        public Element getRootElement(Document doc){
           return doc.getRootElement();
        }
        
        public void readAllEle(Element root){
    //      枚举所有子节点
            for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
               Element element = (Element) i.next();
               // do something
               System.out.println("标签名"+element.getName()+"值为"+element.getText());
               //System.out.println();
               readAllEle(element);
            }    }
    public static void main(String[] args) throws Exception{

    Dom4jEcho dom4E = new Dom4jEcho();
    dom4E.readXml("G:/222.xml");
    }}
      

  2.   

    为什么我用import org.dom4j.Document;它报错呢
    我用的是MyEclipes
      

  3.   

    用import org.dom4j.Document;它报错是因为:dom4j.jar 包没有安装。要去下,然后在MyEclipes里面的属性里面把dom4j.jar 包的路径给指定就ok对XML的遍历用递归。自己写的是正确的!
      

  4.   

    不用下dom.jar包,开发环境自带。
    下面是一下用dom解析xml的方法:
    Message.xml:
    <?xml version="1.0" encoding="GB2312"?><PeopleMessages>
     <message>
      <id>001</id>
      <Parentid>1</Parentid>
      <Fullname>张正明</Fullname>
      <address>
       <id>011</id>
       <Parentid>001</Parentid>
       <city>武汉</city>
       <country>中国</country>
      </address>
     </message>
     <message>
      <id>002</id>
      <Parentid>1</Parentid>
      <Fullname>刘德华</Fullname>
      <address>
       <id>012</id>
       <Parentid>002</Parentid>
       <city>香港</city>
       <country>中国</country>
      </address>
     </message>
     <message>
      <id>003</id>
      <Parentid>1</Parentid>
      <Fullname>张三丰</Fullname>
      <address>
       <id>013</id>
       <Parentid>003</Parentid>
       <city>不详</city>
       <country>中国</country>
      </address>
     </message>
     <message>
      <id>004</id>
      <Parentid>1</Parentid>
      <Fullname>Dav</Fullname>
      <address>
       <id>014</id>
       <Parentid>004</Parentid>
       <city>Washington</city>
       <country>America</country>
      </address>
     </message>
     <message>
      <id>005</id>
      <Parentid>1</Parentid>
      <Fullname>敏锐</Fullname>
      <address>
       <id>015</id>
       <Parentid>005</Parentid>
       <city>北京</city>
       <country>中国</country>
      </address>
     </message>
    </PeopleMessages>代码:
    package com;
    import java.io.File;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import org.w3c.dom.Document;
    import org.w3c.dom.Node;public class ReadXml {
    public ReadXml(){}public void myRXML(){
    String fileName ="D:\\project\\myserver\\WebRoot\\Message.xml";
    File XmlFile=new File(fileName);
    DocumentBuilderFactory df=DocumentBuilderFactory.newInstance();
    DocumentBuilder builder=null;
        Document doc=null;
    try {
    builder=df.newDocumentBuilder();
    doc=builder.parse(XmlFile);
    ReadNode(doc);
    } catch (Exception e) {
    e.printStackTrace();
    }}
    public void ReadNode(Node myNode){
    for(int i=0;i<myNode.getChildNodes().getLength();i++){
    System.out.println("写入:"+myNode.getChildNodes().item(i).getNodeName()); ReadNode(myNode.getChildNodes().item(i));
    }
    }public static void main(String[] args){
    ReadXml rxml=new ReadXml();
    rxml.myRXML();
    }
    }
      

  5.   

    再给一个把XML数据封装二维数组的代码:
    Message.xml:
    <?xml version="1.0" encoding="GB2312"?><PeopleMessages>
     <message>
      <Peopleid>001</Peopleid>
      <Parentid>1</Parentid>
      <Fullname>张正明</Fullname>
      <address>
       <addressid>011</addressid>
       <Parentid>001</Parentid>
       <city>武汉</city>
       <country>中国</country>
      </address>
     </message>
     <message>
      <Peopleid>002</Peopleid>
      <Parentid>1</Parentid>
      <Fullname>刘德华</Fullname>
      <address>
       <addressid>012</addressid>
       <Parentid>002</Parentid>
       <city>香港</city>
       <country>中国</country>
      </address>
     </message>
     <message>
      <Peopleid>003</Peopleid>
      <Parentid>1</Parentid>
      <Fullname>张三丰</Fullname>
      <address>
       <addressid>013</addressid>
       <Parentid>003</Parentid>
       <city>不详</city>
       <country>中国</country>
      </address>
     </message>
     <message>
      <Peopleid>004</Peopleid>
      <Parentid>1</Parentid>
      <Fullname>Dav</Fullname>
      <address>
       <addressid>014</addressid>
       <Parentid>004</Parentid>
       <city>Washington</city>
       <country>America</country>
      </address>
     </message>
     <message>
      <Peopleid>005</Peopleid>
      <Parentid>1</Parentid>
      <Fullname>敏锐</Fullname>
      <address>
       <addressid>015</addressid>
       <Parentid>005</Parentid>
       <city>北京</city>
       <country>中国</country>
      </address>
     </message>
    </PeopleMessages>ReadXml.java:package com;
    import java.io.File;
    import java.util.ArrayList;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import org.w3c.dom.Document;
    import org.w3c.dom.Node;public class ReadXml {
    public ReadXml(){}public void myRXML(){
    String fileName ="D:\\project\\myserver\\WebRoot\\Message.xml";
    File XmlFile=new File(fileName);
    DocumentBuilderFactory df=DocumentBuilderFactory.newInstance();
    DocumentBuilder builder=null;
        Document doc=null;
    try {
    builder=df.newDocumentBuilder();
    doc=builder.parse(XmlFile);
    } catch (Exception e) {
    e.printStackTrace();
    }
    ArrayList<String[]> myRXMLStr=new ArrayList<String[]>();
    ReadNode(doc,myRXMLStr);
    //输出到客户端,数据转换成数组
    int rcount=myRXMLStr.size();
    int ccount=myRXMLStr.get(0).length;
    String OutXmlData[][]=new String[rcount][ccount];
    for(int i=0;i<myRXMLStr.size();i++){
    for (int j=0;j<8;j++){
    String strXML=((String[])(myRXMLStr.get(i)))[j];
    OutXmlData[i][j]=strXML;
    }
    }

    //打印显示
    for(int i=0;i<rcount;i++){
    for(int j=0;j<ccount;j++){
    System.out.print(OutXmlData[i][j]+" ");
    }
    System.out.println();
    }
    }
    public void ReadNode(Node myNode,ArrayList<String[]> RXml){
    String[] RXmlStr= new String[8];
    for(int i=0;i<myNode.getChildNodes().getLength();i++){
    if (myNode.getChildNodes().item(i).getNodeName()=="Peopleid"){
    RXmlStr[0]=myNode.getChildNodes().item(i).getNodeName();
    RXmlStr[1]=myNode.getChildNodes().item(i).getChildNodes().item(0).getNodeValue();
    RXmlStr[2]=myNode.getChildNodes().item(i+2).getNodeName();
    RXmlStr[3]=myNode.getChildNodes().item(i+2).getChildNodes().item(0).getNodeValue();
    RXmlStr[4]=myNode.getChildNodes().item(i+4).getNodeName();
    RXmlStr[5]=myNode.getChildNodes().item(i+4).getChildNodes().item(0).getNodeValue();
    RXmlStr[6]="";
    RXmlStr[7]="";
    RXml.add(RXmlStr);
    }
    if (myNode.getChildNodes().item(i).getNodeName()=="addressid"){
    RXmlStr[0]=myNode.getChildNodes().item(i).getNodeName();
    RXmlStr[1]=myNode.getChildNodes().item(i).getChildNodes().item(0).getNodeValue();
    RXmlStr[2]=myNode.getChildNodes().item(i+2).getNodeName();
    RXmlStr[3]=myNode.getChildNodes().item(i+2).getChildNodes().item(0).getNodeValue();
    RXmlStr[4]=myNode.getChildNodes().item(i+4).getNodeName();
    RXmlStr[5]=myNode.getChildNodes().item(i+4).getChildNodes().item(0).getNodeValue();
    RXmlStr[6]=myNode.getChildNodes().item(i+6).getNodeName();
    RXmlStr[7]=myNode.getChildNodes().item(i+6).getChildNodes().item(0).getNodeValue();
    RXml.add(RXmlStr);
    }
    ReadNode(myNode.getChildNodes().item(i),RXml);
    }
    }public static void main(String[] args){
    ReadXml rxml=new ReadXml();
    rxml.myRXML();
    }
    }