dom4j可以试试,不知道你的数据量有多大,如果太大的话,我没试过
xml文件是有规律的,你可以把要导出的数据构造一下,
我有个简单的代码
package com.test.xmlimport java.io.FileWriter
import java.io.IOException
import java.io.Writer
import org.dom4j.Document
import org.dom4j.DocumentHelper
import org.dom4j.Element
import org.dom4j.io.OutputFormat
import org.dom4j.io.XMLWriter
public class Dom4JXML {
public void createXML() {
//用工厂类创建一个document实例
Document doc = DocumentHelper.createDocument()
//创建根元素emps
Element rootEle = doc.addElement("emps")
//添加注释
rootEle.addComment("这是一个dom4j生成的xml文件")
//emps根节点下创建一个emp节点
Element empEle = rootEle.addElement("emp")
//emp添加属性id="1"
empEle.addAttribute("id", "1")
//emp节点下创建一个name节点
Element nameEle = empEle.addElement("name")
//name节点下创建一个文本节点zhangsan
nameEle.setText("zhangsan")
//再为name节点创建一个兄弟节点
Element sexEle = empEle.addElement("sex")
sexEle.setText("man")
//将document中的内容写入文件中
try {
Writer out = new FileWriter("F:\\emps.xml")
//格式化输出,类型IE浏览一样
OutputFormat format = OutputFormat.createPrettyPrint()
//OutputFormat format = OutputFormat.createCompactFormat()
format.setEncoding("UTF-8")
//创建写出对象
XMLWriter writer = new XMLWriter(out,format)
writer.write(doc)
writer.close()
System.out.println("生成emps.xml成功。")
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace()
System.out.println("失败了。")
}
}
public static void main(String[] args) {
new Dom4JXML().createXML()
}
}
然而从xml文件中解析以后的数据收集可以用SAX试试看
我这里有个简单的例子
package com.test.xmlimport org.xml.sax.Attributes
import org.xml.sax.SAXException
import org.xml.sax.helpers.DefaultHandler
public class SAXParseHandler extends DefaultHandler{
public void startDocument()throws SAXException{
System.out.println("起始文挡")
}
public void endDocument()throws SAXException{
System.out.println("结束文挡")
}
public void characters(char[] ch,int start,int length)throws SAXException{
String charString=new String(ch,start,length)
System.out.println("字符:"+charString)
}
public void startElement(String namespaceURI,String localName,String qName,Attributes atts)throws SAXException{
System.out.println("起始元素:"+qName)
for(int i=0i<atts.getLength()i++){
System.out.println("属性值:"+atts.getValue(i))
}
}
public void endElement(String namespaceURI,String localName,String qName)throws SAXException{
System.out.println("结束元素:"+qName)
}
}
package com.test.xml
import javax.xml.parsers.SAXParser
import javax.xml.parsers.SAXParserFactory
public class Books {
/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO 自动生成方法存根
SAXParserFactory factory=SAXParserFactory.newInstance()
SAXParser parser=factory.newSAXParser()
parser.parse("booksamp.xml",new SAXParseHandler())
}
}
一个XML文档,可以先构造一个DOM,然后将DOM转化为xml序列,输出或者生成文件。package testimport java.io.ByteArrayOutputStream
import java.io.File
import java.io.FileOutputStream
import javax.xml.parsers.DocumentBuilder
import javax.xml.parsers.DocumentBuilderFactory
import javax.xml.transform.Transformer
import javax.xml.transform.TransformerFactory
import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.StreamResult
import org.w3c.dom.Document
import org.w3c.dom.Element
public class Test {
public static void generate(){
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance()
DocumentBuilder builder = factory.newDocumentBuilder()
Document document = builder.newDocument()
document.setXmlVersion("1.0")
document.setXmlStandalone(true)
Element root = document.createElement_x("MobileNet") //创建根节点
document.appendChild(root) //将根节点添加到Document对象中
Element pageElement = document.createElement_x("page")//设置第一个page元素到
pageElement.setAttribute("name", "list.jsp")//设置page节点的name属性
Element methodElement = document.createElement_x("method") //设置method节点
methodElement.setTextContent("get") //给method设置值
pageElement.appendChild(methodElement)//添加method节点到page节点内
Element displayElement = document.createElement_x("display") //设置method节点
displayElement.setTextContent("list撒旦发放")//给display设置值
pageElement.appendChild(displayElement) //添加display节点到page节点内
Element request_paramElement = document.createElement_x("request_param")
request_paramElement.setTextContent("request_param1|request_param2")
pageElement.appendChild(request_paramElement)
root.appendChild(pageElement)
pageElement = document.createElement_x("page") //设置第二个page元素到
pageElement.setAttribute("name", "content.jsp")//设置page节点的name属性
methodElement = document.createElement_x("method")
methodElement.setTextContent("post")
pageElement.appendChild(methodElement)
displayElement = document.createElement_x("display")
displayElement.setTextContent("content")
pageElement.appendChild(displayElement)
Element url_titleElement = document.createElement_x("url_title") //设置url_title节点
url_titleElement.setTextContent("title,publisher,published_calendar")//给url_title设置值
pageElement.appendChild(url_titleElement)//添加url_title节点到page节点内
root.appendChild(pageElement)//将page段加人根节点内
TransformerFactory transFactory = TransformerFactory.newInstance()//开始把Document映射到文件
Transformer transFormer = transFactory.newTransformer()
DOMSource domSource = new DOMSource(document) //设置输出结果
File file = new File("MobileNetRule.xml")//生成xml文件
if (!file.exists()) {
file.createNewFile()
}
FileOutputStream out = new FileOutputStream(file) //文件输出流
StreamResult xmlResult = new StreamResult(out) //设置输入源
transFormer.transform(domSource, xmlResult) //输出xml文件
System.out.println(file.getAbsolutePath()) //测试文件输出的路径
TransformerFactory tf = TransformerFactory.newInstance()
Transformer t = tf.newTransformer()
t.setOutputProperty("{/encoding/}","GB2312/")
ByteArrayOutputStream boc = new ByteArrayOutputStream()
t.transform(new DOMSource(document), new StreamResult(boc))
String xmlstring = boc.toString()
System.out.println(xmlstring)
} catch (Exception e) {
e.printStackTrace()
}
}
public static void main(String[] args){
Test.generate()
}
}
// 给你一个例子,你参考下// java通过dom读写xml文件
/*要读的xml文件
<?xml version="1.0" encoding="GB2312"?>
<学生花名册>
<学生 性别 = "男">
<姓名>李华</姓名>
<年龄>14</年龄>
</学生>
<学生 性别 = "男">
<姓名>张三</姓名>
<年龄>16</年龄>
</学生>
</学生花名册>
*/
package xml
import java.io.FileOutputStream
import java.io.OutputStreamWriter
import java.io.Writer
import java.util.Iterator
import java.util.Vector
import javax.xml.parsers.DocumentBuilder
import javax.xml.parsers.DocumentBuilderFactory
import javax.xml.transform.OutputKeys
import javax.xml.transform.Result
import javax.xml.transform.Source
import javax.xml.transform.Transformer
import javax.xml.transform.TransformerConfigurationException
import javax.xml.transform.TransformerException
import javax.xml.transform.TransformerFactory
import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.StreamResult
import org.w3c.dom.Document
import org.w3c.dom.Element
import org.w3c.dom.Node
import org.w3c.dom.NodeList
import org.w3c.dom.Text
public class DomTest {
Vector students_Vector
private Vector readXMLFile(String file) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance()
DocumentBuilder builder = dbf.newDocumentBuilder()
Document doc = builder.parse(file) // 获取到xml文件
// 下面开始读取
Element root = doc.getDocumentElement() // 获取根元素
NodeList students = root.getElementsByTagName_r("学生")
students_Vector = new Vector()
for (int i = 0 i < students.getLength() i++) {
// 一次取得每一个学生元素
Element ss = (Element) students.item(i)
// 创建一个学生的实例
student stu = new student()
stu.setSex(ss.getAttribute("性别"))
NodeList names = ss.getElementsByTagName_r("姓名")
Element e = (Element) names.item(0)
Node t = e.getFirstChild()
stu.setName(t.getNodeValue())
NodeList ages = ss.getElementsByTagName_r("年龄")
e = (Element) ages.item(0)
t = e.getFirstChild()
stu.setAge(Integer.parseInt(t.getNodeValue()))
students_Vector.add(stu)
}
return students_Vector
}
// 写入xml文件
public static void callWriteXmlFile(Document doc, Writer w, String encoding) {
try {
Source source = new DOMSource(doc)
Result result = new StreamResult(w)
Transformer xformer = TransformerFactory.newInstance()
.newTransformer()
xformer.setOutputProperty(OutputKeys.ENCODING, encoding)
xformer.transform(source, result)
} catch (TransformerConfigurationException e) {
e.printStackTrace()
} catch (TransformerException e) {
e.printStackTrace()
}
}
private void writeXMLFile(String outfile) {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance()
DocumentBuilder builder = null
try {
builder = dbf.newDocumentBuilder()
} catch (Exception e) {
}
Document doc = builder.newDocument()
Element root = doc.createElement("学生花名册")
doc.appendChild(root) // 将根元素添加到文档上
// 获取学生信息
for (int i = 0 i < students_Vector.size() i++) {
student s = (student) students_Vector.get(i)
// 创建一个学生
Element stu = doc.createElement("学生")
stu.setAttribute("性别", s.getSex())
root.appendChild(stu)// 添加属性
// 创建文本姓名节点
Element name = doc.createElement("姓名")
stu.appendChild(name)
Text tname = doc.createTextNode(s.getName())
name.appendChild(tname)
//创建文本年龄节点
Element age = doc.createElement("年龄")
stu.appendChild(age) // 将age添加到学生节点上
Text tage = doc.createTextNode(String.valueOf(s.getAge()))
age.appendChild(tage) // 将文本节点放在age节点上
}
try {
FileOutputStream fos = new FileOutputStream(outfile)
OutputStreamWriter outwriter = new OutputStreamWriter(fos)
// ((XmlDocument)doc).write(outwriter) //出错!
callWriteXmlFile(doc, outwriter, "gb2312")
outwriter.close()
fos.close()
} catch (Exception e) {
e.printStackTrace()
}
}
public static void main(String args[]) {
String str = "xml/student.xml"
DomTest t = new DomTest()
try {
Vector v = t.readXMLFile(str)
Iterator it = v.iterator()
while (it.hasNext()) {
student s = (student) it.next()
System.out.println(s.getName() + "\t" + s.getAge() + "\t"
+ s.getSex())
}
} catch (Exception e) {
e.printStackTrace()
}
String outfile = "xml/stucopy.xml"
t.writeXMLFile(outfile)
}
}
class student{
private String sex
private String name
private int age
public int getAge() {
return age
}
public void setAge(int age) {
this.age = age
}
public void setSex(String s){sex=s}
public String getSex(){return sex}
public void setName(String n){name=n}
public String getName(){return name}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)