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相关