当前位置:编程学习 > JAVA >>

xml文件解析

xml文件如下:
<syn2cln>
<grp>
<mems>
<mem>
<id>111</id>
<oper>1</oper>
<date>65478</date>
</mem>
<mem>
<id>112</id>
<oper>2</oper>
<date>6547521</date>
</mem>
</mems>
<id>001</id>
<oper>1</oper>
<date>30215</date>
<name>同事</name>
<note>说明</note>
</grp>
<grp>
<id>101</id>
<oper>1</oper>
<date>30215</date>
<name>朋友</name>
<note>说明1</note>
<mems>
<mem>
<id>11132</id>
<oper>1</oper>
<date>654</date>
</mem>
<mem>
<id>112</id>
<oper>2</oper>
<date>22112</date>
</mem>
</mems>
</grp>
</syn2cln>
代码如下:
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.UUID;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;







public class sd {

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
        String msg = sendxml();
     System.out.println(msg);
     XMLParser xp = new XMLParser(msg);
     Document doc = xp.getDoc();
        Element root=doc.getDocumentElement();
        String bString = root.getNodeName();
        NodeList nodes=root.getElementsByTagName("grp");//定位到grp节点
        for(int i=0;i<nodes.getLength();i++){
         Element riverElement=(Element)(nodes.item(i));
         Element introduction=(Element)riverElement.getElementsByTagName("id").item(0);
         NodeList nl = riverElement.getElementsByTagName("mems");//定位到mems节点
         for(int j=0;j<nl.getLength();j++){
               System.out.println("this is a num=" + nl.getLength());
         Element a1=(Element)(nl.item(j));
               Element id=(Element)a1.getElementsByTagName("id").item(0);
               System.out.println("this is a id" + id);
         }
        }
    


    
}

static String sendxml(){
     String msg = "";
        //msg += "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
     msg += "<syn2cln>";
     msg += "<grp>";
    
       msg += "<mems>";
     msg += "<mem>";
     msg += "<id>";
     msg += "111";
     msg += "</id>";
     msg += "<oper>";
     msg += "1";
     msg += "</oper>";
     msg += "<date>";
     msg += "65478";
     msg += "</date>";
     msg += "</mem>";
     msg += "<mem>";
     msg += "<id>";
     msg += "112";
     msg += "</id>";
     msg += "<oper>";
     msg += "2";
     msg += "</oper>";
     msg += "<date>";
     msg += "6547521";
     msg += "</date>";
     msg += "</mem>";
     msg += "</mems>";
    
     msg += "<id>";
     msg += "001";
     msg += "</id>";
     msg += "<oper>";
     msg += "1";
     msg += "</oper>";
     msg += "<date>";
     msg += "30215";
     msg += "</date>";
     msg += "<name>";
     msg += "同事";
     msg += "</name>";
     msg += "<note>";
     msg += "说明";
     msg += "</note>";
  
     msg += "</grp>";

     msg += "<grp>";
     msg += "<id>";
     msg += "101";
     msg += "</id>";
     msg += "<oper>";
     msg += "1";
     msg += "</oper>";
     msg += "<date>";
     msg += "30215";
     msg += "</date>";
     msg += "<name>";
     msg += "朋友";
     msg += "</name>";
     msg += "<note>";
     msg += "说明1";
     msg += "</note>";
     msg += "<mems>";
     msg += "<mem>";
     msg += "<id>";
     msg += "11132";
     msg += "</id>";
     msg += "<oper>";
     msg += "1";
     msg += "</oper>";
     msg += "<date>";
     msg += "654";
     msg += "</date>";
     msg += "</mem>";
     msg += "<mem>";
     msg += "<id>";
     msg += "112";
     msg += "</id>";
     msg += "<oper>";
     msg += "2";
     msg += "</oper>";
     msg += "<date>";
     msg += "22112";
     msg += "</date>";
     msg += "</mem>";
     msg += "</mems>";
     msg += "</grp>";
    
     msg += "</syn2cln>";
     return msg;
}

}
我想读取mem节点下的值,定位到了mems节点,mems.getLength()=1也是正确的,为什么取出来的a1为null。
打印结果如下:
this is a num=1
this is a id[id: null]
this is a num=1
this is a id[id: null] --------------------编程问答-------------------- 你试试定位到Mem节点下的各个子节点,看可以得到不 --------------------编程问答--------------------     try{
        String msg = sendxml();
        System.out.println(msg);  
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
        Document doc = dbf.newDocumentBuilder().parse(new InputSource(new StringReader(msg)));
        Element root=doc.getDocumentElement(); 
        NodeList nodes=root.getElementsByTagName("grp");//定位到grp节点
        for(int i=0;i<nodes.getLength();i++){
            Element riverElement=(Element)(nodes.item(i)); 
            NodeList nl = riverElement.getElementsByTagName("mem");//定位到mems节点
            for(int j=0;j<nl.getLength();j++){ 
                Element a1=(Element)(nl.item(j));
                Element id=(Element)a1.getElementsByTagName("id").item(0);
                System.out.println("this is node name:" + id.getNodeName()+":this is node value:"+id.getFirstChild().getNodeValue());
            }
        }
    }catch(Exception e)
    {
        e.printStackTrace();
    }
补充:Java ,  Java相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,