这样写正确吗(用一递归):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));
}
}
for(int i=0;i<myNode.getChildNodes().getLength();i++){
System.out.println("写入:"+mynod.getChildNodes().item(i).getNodeName());a(myNode.getChildNodes().item(i));
}
}
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");
}}
我用的是MyEclipes
下面是一下用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();
}
}
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();
}
}