rt

解决方案 »

  1. 这样的写法正确吗:
    a(Node myNode){
    for(int i=0;i<myNode.getChildNodes().getLength();i++){
    System.out.println("写入:"+i);a(myNode.getChildNodes().item(0));
    }
      

  2. i没有写,应是这样写:
    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));
    }
      


  3.     public static void visit(Node node, int level) {
            // 获取孩子节点
            NodeList list = node.getChildNodes();
            for (int i=0; i<list.getLength(); i++) {
                // 获取当前节点
                Node childNode = list.item(i);
        
                // 递归
                visit(childNode, level+1);
            }
        }如果要遍历一个xml文档,就调用
        Document doc = null;
        // doc = parse("a.xml"); // 这里给你自己的xml创建doc。
        visit(doc, 0);
      

  4. public static void visit(Node node, int level) {        NodeList list = node.getChildNodes();
            for (int i=0; i<list.getLength(); i++) {
                // 处理节点
                Node childNode = list.item(i);
        
                // 递归
                visit(childNode, level+1);
            }
        }   如果要处理一个完整的xml文档
       调用
       visit(doc,0);
       
      

  5. public static void visit(Node node, int level) {        NodeList list = node.getChildNodes();
            for (int i=0; i<list.getLength(); i++) {
                // 处理节点
                Node childNode = list.item(i);
        
                // 递归
                visit(childNode, level+1);
            }
        }   如果要处理一个完整的xml文档
       调用visit(doc,0);
      

  6. 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");
    }}
      

  7. 我的那个方法是基于dom的, 不需要第三方包,核心代码就5行。
      

  8. 都正确,自己的写法也正确用递归,用那个dom都可以
      

  9. 不用下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();
    }
    }
      

  10. 再给一个把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();
    }
    }
      

类似问题 »