`
taiwei.peng
  • 浏览: 232633 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SAX 解析xml并生成EXCEL

    博客分类:
  • XML
阅读更多

1.xml代码

<?xml version="1.0" encoding="utf-8"?>
<DataSet xmlns="http://www.sz-customs.gov.cn/WebService/">
       <Table id="Table1" msdata:rowOrder="0">
        <FULL_NAME>广州广发鞋材有限公司</FULL_NAME>
        <TRADE_CO />
        <CASE_ID>533040120040041</CASE_ID>
        <CASE_DATE>2004-10-22T00:00:00+08:00</CASE_DATE>
        <CASE_DEPT>深圳缉私局文锦渡缉私分局查私科</CASE_DEPT>
        <CASE_TYPE>违规</CASE_TYPE>
      </Table>
      <Table id="Table2" msdata:rowOrder="1">
        <FULL_NAME>联能科技(深圳)有限公司</FULL_NAME>
        <TRADE_CO>4403945553</TRADE_CO>
        <CASE_ID>533040120040061</CASE_ID>
        <CASE_DATE>2004-11-02T00:00:00+08:00</CASE_DATE>
        <CASE_DEPT>深圳缉私局文锦渡缉私分局查私科</CASE_DEPT>
        <CASE_TYPE>违规</CASE_TYPE>
      </Table>
      <Table id="Table3" msdata:rowOrder="2">
        <FULL_NAME>肇庆时升运输有限公司</FULL_NAME>
        <TRADE_CO />
        <CASE_ID>533040120040082</CASE_ID>
        <CASE_DATE>2004-10-22T00:00:00+08:00</CASE_DATE>
        <CASE_DEPT>深圳缉私局文锦渡缉私分局查私科</CASE_DEPT>
        <CASE_TYPE>违规</CASE_TYPE>
      </Table>
      <Table id="Table4" msdata:rowOrder="3">
        <FULL_NAME>深圳市国免工贸有限公司</FULL_NAME>
        <TRADE_CO />
        <CASE_ID>533040120040083</CASE_ID>
        <CASE_DATE>2004-10-21T00:00:00+08:00</CASE_DATE>
        <CASE_DEPT>深圳缉私局文锦渡缉私分局查私科</CASE_DEPT>
        <CASE_TYPE>违规</CASE_TYPE>
      </Table>
      <Table id="Table5" msdata:rowOrder="4">
        <FULL_NAME>南山区福光港兴手袋来料加工厂</FULL_NAME>
        <TRADE_CO />
        <CASE_ID>533040120040101</CASE_ID>
        <CASE_DATE>2004-10-27T00:00:00+08:00</CASE_DATE>
        <CASE_DEPT>深圳缉私局文锦渡缉私分局查私科</CASE_DEPT>
        <CASE_TYPE>违规</CASE_TYPE>
      </Table>

</DataSet>

 

java 代码

package com.soft.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import com.soft.model.ChenxinResult;
 
public class SAXDemo extends DefaultHandler{
 
    private List<ChenxinResult> result = null;  
    private ChenxinResult chenxin = null;  
    private String preTag = null;//作用是记录解析时的上一个节点名称  
      
    public List<ChenxinResult> getResults(InputStream  xmlStream) throws Exception{  
        SAXParserFactory factory = SAXParserFactory.newInstance();  
        SAXParser parser = factory.newSAXParser();  
        SAXDemo handler = new SAXDemo();  
        parser.parse(xmlStream, handler);  
        return handler.getResults();  
    }  
      
    public List<ChenxinResult> getResults(){  
        return result;  
    }  
      
    @Override 
    public void startDocument() throws SAXException {  
     result = new ArrayList<ChenxinResult>();  
    }  
 
    @Override 
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {  
        if("Table".equals(qName)){  
         chenxin = new ChenxinResult();  
         chenxin.setId(attributes.getValue(0));   
        }  
        preTag = qName;//将正在解析的节点名称赋给preTag  
    }  
 
    @Override 
    public void endElement(String uri, String localName, String qName)  
            throws SAXException {  
        if("Table".equals(qName)){  
         result.add(chenxin);  
         chenxin = null;  
        }  
        preTag = null;
    }  
      
    @Override 
    public void characters(char[] ch, int start, int length) throws SAXException {  
        if(preTag!=null){  
            String content = new String(ch,start,length); 
            if("FULL_NAME".equals(preTag)){  
               chenxin.setFullname(content);
            }else if("TRADE_CO".equals(preTag)){  
               chenxin.setTradecode(content);
            }else if("CASE_ID".equals(preTag)){
               chenxin.setCaseid(content);
            }else if("CASE_DATE".equals(preTag)){
               chenxin.setCasedate(content);
            }else if("CASE_DEPT".equals(preTag)){
               chenxin.setCasedept(content);
            }else if("CASE_TYPE".equals(preTag)){
               chenxin.setCasetype(content);
            }
        }  
    }
   
    public void testSAX(){  
     try{
      SAXDemo demo=new SAXDemo();
      InputStream input = new FileInputStream("D:/company.xml");  
         List<ChenxinResult> demoList=demo.getResults(input);
        
   // 打开文件
   WritableWorkbook book1 = Workbook.createWorkbook(new File("D:/user3.xls "));
   // 生成名为“第一页”的工作表,参数0表示这是第一页
   WritableSheet sheet = book1.createSheet(" EXIMUSER ", 0);
   // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
   Label label = new Label(0, 0, "编号");
   Label label1 = new Label(1, 0, "公司企业");
   Label label2 = new Label(2, 0, "用户编号");
   Label label3 = new Label(3, 0, "注册号");
   Label label4 = new Label(4, 0, "时间");
   Label label5 = new Label(5, 0, "部门");
   Label label6 = new Label(6, 0, "行为");
   
   // 将定义好的单元格添加到工作表中
   sheet.addCell(label);
   sheet.setColumnView(0,10);   
   sheet.addCell(label1);
   sheet.setColumnView(1,35);   
   sheet.addCell(label2);
   sheet.setColumnView(2,20);
   sheet.addCell(label3);
   sheet.setColumnView(3,20);
   sheet.addCell(label4);
   sheet.setColumnView(4,30);
   sheet.addCell(label5);
   sheet.setColumnView(5,30);
   sheet.addCell(label6);
   sheet.setColumnView(6,10);
   
   for(int i=0;i<demoList.size();i++){
    int column=0;
    int width=0;
    ChenxinResult result=(ChenxinResult)demoList.get(i);
    
    Label label8 = new Label(column++,i+1,result.getId());
    sheet.addCell(label8);
    sheet.setColumnView(width,10);
    
    Label label9 = new Label(column++,i+1,result.getFullname());
    sheet.addCell(label9);
    sheet.setColumnView(width+=1,35);
    
    Label label10 = new Label(column++,i+1,result.getTradecode());
    sheet.addCell(label10);
    sheet.setColumnView(width+=1,20);
    
    Label label11 = new Label(column++,i+1,result.getCaseid());
    sheet.addCell(label11);
    sheet.setColumnView(width+=1,20);
    
    Label label12 = new Label(column++,i+1,result.getCasedate());
    sheet.addCell(label12);
    sheet.setColumnView(width+=1,30);
    
    Label label13 = new Label(column++,i+1,result.getCasedept());
    sheet.addCell(label13);
    sheet.setColumnView(width+=1,30);
    
    Label label14 = new Label(column++,i+1,result.getCasetype());
    sheet.addCell(label14);
    sheet.setColumnView(width+=1,10); 
   }
   book1.write();
   book1.close();
     }catch(Exception ce){
      ce.printStackTrace();
     }
    }
   
    public static void main(String [] args){
     SAXDemo demo=new SAXDemo();
     demo.testSAX();
    }
      

注意这里需要用到jxl.jar自己到网上去下载。

 

 

以下是 ChenxinResult主要是用来组装数据

public class ChenxinResult {
 
 private String id;
 private String fullname;
 private String tradecode;
 private String caseid;
 private String casedate;
 private String casedept;
 private String casetype;
 
 public String getId() {
  return id;
 }
 public void setId(String id) {
  this.id = id;
 }
 public String getFullname() {
  return fullname;
 }
 public void setFullname(String fullname) {
  this.fullname = fullname;
 }
 public String getTradecode() {
  return tradecode;
 }
 public void setTradecode(String tradecode) {
  this.tradecode = tradecode;
 }
 public String getCaseid() {
  return caseid;
 }
 public void setCaseid(String caseid) {
  this.caseid = caseid;
 }
 public String getCasedate() {
  return casedate;
 }
 public void setCasedate(String casedate) {
  this.casedate = casedate;
 }
 public String getCasedept() {
  return casedept;
 }
 public void setCasedept(String casedept) {
  this.casedept = casedept;
 }
 public String getCasetype() {
  return casetype;
 }
 public void setCasetype(String casetype) {
  this.casetype = casetype;
 }

}

 

 

以下代码是java生成xml

public void BuildXMLDoc() throws IOException, JDOMException {
  // 创建根节点 list;
        Element root = new Element("list");
       // 根节点添加到文档中;
        Document Doc = new Document(root);
       // 此处 for 循环可替换成 遍历 数据库表的结果集操作;
       for (int i = 0; i < 5; i++) {
           //创建节点 user;
           Element elements = new Element("user");
           //给 user 节点添加属性 id;
           elements.setAttribute("id", "" + i);
           //给 user 节点添加子节点并赋值;
           //new Element("name")中的 "name" 替换成表中相应字段,setText("xuehui")中 "xuehui 替换成表中记录值;
           elements.addContent(new Element("name").setText("xuehui"));
           elements.addContent(new Element("age").setText("28"));
           elements.addContent(new Element("sex").setText("Male"));
           //给父节点list添加user子节点;
           root.addContent(elements);
       }
       Format format = Format.getPrettyFormat();
       XMLOutputter XMLOut = new XMLOutputter(format);
       XMLOut.output(Doc, new FileOutputStream("D:/user.xml"));
    }

需要用到Jdom.jar可以网上下载

1
1
分享到:
评论

相关推荐

    解析Excel和XML

    2. **SAX解析**:如Python的xml.sax模块,它只在遇到元素、属性等时触发事件,减少内存占用。 3. **XPath和XSLT**:XPath用于在XML文档中查找信息,XSLT则用于转换XML文档的结构。 结合Excel和XML 在某些情况下,...

    XML文件导出Excel(xmlToExcel)示例源码

    7. **Excel写入**:在生成Excel文件时,源码可能使用了特定的API,如Microsoft的OpenXML SDK或第三方库,来设置单元格的值、样式、公式等。 8. **错误处理与性能优化**:源码中应包含错误处理机制,如处理无效的XML...

    java 解析xml 自动生成word (小程序与java交互).zip

    在本项目中,我们主要探讨的是如何通过Java技术解析XML文件并自动生成Word文档,同时结合小程序进行前后端交互。这个过程涉及到多个关键的技术点,包括Maven项目管理、MyBatis数据库操作、JSON数据交换以及Java的XML...

    以读取XML方式的大批量导入Excel

    在Java中,我们可以使用DOM(Document Object Model)、SAX(Simple API for XML)或者StAX(Streaming API for XML)等API来解析XML文件。DOM将整个XML文档加载到内存中,适合小型文件;SAX事件驱动,逐行解析,...

    vtd-xml XML解析工具

    在Java环境中,XimpleWare公司提供的VTD-XML库包含了一系列API,如`VTDGen`用于解析XML文档并生成VTD索引,`AutoPilot`用于导航XML结构,以及`VTDNav`接口,它是核心的导航类,提供了各种方法来访问和操作XML元素和...

    java xml 解析 源代码

    在源代码中,你可以找到使用DOM和SAX解析XML的示例。通过阅读和运行这些代码,你将更好地理解它们的工作原理和使用场景。记得在实际操作时,确保XML文件的编码正确,并处理可能的异常情况,如文件不存在或格式错误。...

    代码快速实现xml转换为Excel(xml转excel通用类-java-完成代码可作工具使用).pdf

    在Java中,我们可以使用DOM、SAX或StAX解析XML,然后利用Apache POI库创建和操作Excel文件。 在提供的代码中,作者定义了一个`xExcelType`类来存储整个转换所需的配置信息,包括Excel的显示方式、根节点名称以及...

    excel和xml解析需要引入的jar包

    在Java编程环境中,处理Excel和XML文件通常需要借助第三方库,因为Java...而DOM4J则可以方便地解析XML文档,通过XPath表达式定位元素,进行数据提取或更新。结合这些库,开发者可以构建强大的数据处理和报告生成系统。

    android 读取Excel文件转成xml文件

    - Android系统内置了对XML的支持,可以使用java.util DOM或SAX解析器,或者使用Android的XmlPullParser接口来生成XML。最常用的是DOM,因为它允许以树形结构处理XML文档,便于操作。 5. **字符资源与XML文件**: ...

    代码快速实现xml转换为Excel(xml转excel通用类-java-完成代码可作工具使用).docx

    在转换过程中,我们需要解析XML文件,提取其中的数据,并按照Excel的格式重新组织这些数据。 为了实现XML到Excel的转换,我们可以遵循以下步骤: 1. **定义数据结构**: - 创建一个名为`xmlStruct`的类,用于表示...

    java xml excel文件导入导出

    例如,使用流式API(如SAX和StAX)解析XML,避免一次性加载整个XML到内存;对于Excel,可以分批读写,避免一次性处理大量行。 总结,Java提供了丰富的库和API来处理Excel和XML文件,无论是读取、写入还是数据转换,...

    office word文档解析

    - 使用SAX解析器而非DOM(Document Object Model)解析XML,可以减少内存占用,尤其对于大型文档。 - 考虑到内存限制,可能需要分块读取和处理文档,避免一次性加载整个文档到内存。 总之,“Office Word文档解析...

    xpath 生成excel

    1. 加载XML文档:使用DOM解析器或SAX解析器加载XML文件,构建一个文档对象模型(DOM)。 2. 编写XPath表达式:根据需求,编写能够定位所需数据的XPath表达式。 3. 执行XPath表达式:通过XPathAPI(如Java的javax.xml...

    Excel文件转成XML

    5. **资源绑定与定制**:如果需要绑定特定资源或进行小规模改动,这一步骤可能涉及修改XML生成逻辑,如添加特定的XML注释、处理头信息或设置命名空间。 在提供的压缩包子文件“ExcelOperToXML”中,很可能包含了...

    Java Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    1. **解析XML文件**:使用Java的DOM(Document Object Model)、SAX(Simple API for XML)或StaX(Streaming API for XML)等解析器读取XML文件并获取数据。DOM将整个XML文档加载到内存中,适合小文件;SAX和StaX则...

    从数据库中查询结果,并导出EXCEL 和XML,支持导入XML,再导出EXCEL,互相转换

    导入XML到数据库通常涉及解析XML文件,提取数据,然后将这些数据插入到相应的数据库表中。这可能需要使用DOM(文档对象模型)或SAX(简单API for XML)解析器。例如,Python的xml.etree.ElementTree库提供了这两种...

    通过web端转换excel为xml文件,可一次性转换多个xml

    4. **数据转换**:POI读取Excel表格内容,然后使用Java DOM(Document Object Model)或SAX(Simple API for XML)等API将数据转化为XML结构。XML文件的结构可以根据预定义的模板或者从Excel的列名自动生成。 5. **...

    JAVA版XML转EXCLE

    总结来说,`JAVA版XML转EXCLE`是一项利用Java编程技术,通过解析XML文件并借助Apache POI库生成EXCEL的工作流程。这一过程有助于简化数据的读取和分析,尤其对非程序员而言,EXCEL的直观性提供了更友好的用户体验。...

    excelToXml源码

    综上,ExcelToXml源码的学习不仅可以提升你处理Excel和XML数据的能力,还能深入理解文件读写、数据转换、XML生成等核心编程技术,对于从事Java开发尤其是数据处理领域的开发者来说,是一份宝贵的学习资料。...

Global site tag (gtag.js) - Google Analytics