java 代码
- package cn.flyingsoft.oais.service.exchange.entity.impl;
- import java.io.IOException;
- import java.util.List;
- import org.jdom.Document;
- import org.jdom.Element;
- import org.jdom.JDOMException;
- import org.jdom.input.SAXBuilder;
- import org.jdom.xpath.XPath;
- import cn.flyingsoft.oais.di.ip.entity.DataMap;
- import cn.flyingsoft.oais.di.ip.entity.Field;
- import cn.flyingsoft.oais.di.ip.entity.ValueText;
- /**
- * 数据格式:根结点:data,子节点:多个package,子节点的子:description、content(可包含多个package) 依次嵌套
- * @author jin 2007-04-05
- *
- */
- public class ParseXML {
- //constructor
- public ParseXML(){}
- //读取根结点
- public void parseRoot(String xmlPath){
- try {
- SAXBuilder saxBuilder = new SAXBuilder() ;
- Document doc = saxBuilder.build(xmlPath) ;
- Element root = doc.getRootElement() ;
- //读取根结点的属性
- String version = root.getAttributeValue("version") ;
- String createdate = root.getAttributeValue("createdate") ;
- //根结点下是否含有Package节点
- if(root.getChildren().size()>0){
- //读取根结点的所有子节点(即Package节点)
- List rootChildList = XPath.selectNodes(root,"/data/*") ;
- for(int i = 0; i<rootChildList.size(); i++){
- //读取其中一个根结点的子节点(即 Package节点)
- Element packageElement = (Element) rootChildList.get(i) ;
- parsePackage(packageElement) ;
- }
- }
- } catch (JDOMException e) {
- // TODO 自动生成 catch 块
- e.printStackTrace();
- } catch (IOException e) {
- // TODO 自动生成 catch 块
- e.printStackTrace();
- }
- }
- //读取根结点下的一个Package子节点
- private void parsePackage(Element pkgElement){
- try {
- //读取Package节点下的Description节点
- Element descriptionElement = (Element) XPath.selectSingleNode(pkgElement,"child::Description") ;
- //读取Description节点下的所有子节点
- List descriptionChildList = XPath.selectNodes(descriptionElement,"child::*") ;
- DataMap desDataMap = new DataMap() ;
- //遍历Description所有子节点
- for(int i = 0; i<descriptionChildList.size(); i++){
- //读取一个Description的子节点
- Element childElement = (Element) descriptionChildList.get(i) ;
- //读取该节点的值
- String value = childElement.getValue() ;
- //将所有Description子节点的内容以键-值对应放入Map
- desDataMap.put(new Field(childElement.getName()),new ValueText(value)) ;
- }
- System.out.println(desDataMap) ;
- //是否含有Content节点
- if(pkgElement.getChildren().size()>1){
- //读取所有该Package节点下的Content节点
- List contentElementList = XPath.selectNodes(pkgElement,"child::Content") ;
- //遍历Package节点下的所有Content节点
- for(int j = 0; j<contentElementList.size(); j++){
- //读取一个Content节点
- Element contentElement = (Element) contentElementList.get(j) ;
- //递归给下面读取Content的方法
- parseContent(contentElement) ;
- }
- }
- } catch (JDOMException e) {
- // TODO 自动生成 catch 块
- e.printStackTrace();
- }
- }
- //读取一个Content节点
- private void parseContent(Element contentElement){
- //是否含有Package节点
- if(contentElement.getChildren().size()>0){
- try {
- //读取Content节点下的所有Package节点
- List contentChildList = XPath.selectNodes(contentElement,"child::Package") ;
- //遍历Content节点下的所有Package节点
- for(int i = 0; i<contentChildList.size(); i++){
- //读取一个Package节点
- Element contentChildPackage = (Element) contentChildList.get(i) ;
- //递归给上面读取Package的方法
- parsePackage(contentChildPackage) ;
- }
- } catch (JDOMException e) {
- // TODO 自动生成 catch 块
- e.printStackTrace();
- }
- }
- }
- //main函数
- public static void main(String[] args){
- ParseXML p = new ParseXML();
- p.parseRoot("D:/sip.xml") ;
- }
- }
xml 代码
- <?xml version="1.0" encoding="UTF-8"?>
- <data version="1.0" createdate="2006-01-01 23:10:10">
- <Package>
- <Description>
- <全宗号>02</全宗号>
- <档号>A0091</档号>
- <案卷号></案卷号>
- <合同编号></合同编号>
- <合同代码></合同代码>
- <分部分项代号></分部分项代号>
- <单元工程代号></单元工程代号>
- <合同类型></合同类型>
- <档案类型></档案类型>
- <资料类型></资料类型>
- <分类号></分类号>
- <类目名称></类目名称>
- <案卷顺序号></案卷顺序号>
- <案卷题名>关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程</案卷题名>
- <立卷单位>关于右岸工程</立卷单位>
- <起止日期></起止日期>
- <保管期限></保管期限>
- <密级></密级>
- <文件件数></文件件数>
- <总页数></总页数>
- <卷盒宽度></卷盒宽度>
- <库位号></库位号>
- <套数></套数>
- <备注></备注>
- </Description>
- <Content>
- <Package>
- <Description>
- <全宗号>23</全宗号>
- <档号></档号>
- <档案类型></档案类型>
- <合同代码></合同代码>
- <合同类型></合同类型>
- <分部分项代号></分部分项代号>
- <单元工程代号></单元工程代号>
- <合同编号></合同编号>
- <分类号></分类号>
- <类目名称></类目名称>
- <案卷号></案卷号>
- <卷内顺序号>23</卷内顺序号>
- <文件编号></文件编号>
- <题名>关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程</题名>
- <责任者></责任者>
- <文件类别代码></文件类别代码>
- <页数></页数>
- <页次></页次>
- <保管期限></保管期限>
- <密级></密级>
- <日期></日期>
- <图纸幅面></图纸幅面>
- <版本号></版本号>
- <原文路径>
- </原文路径>
- <备注></备注>
- </Description>
- <Content>
- </Content>
- </Package>
- </Content>
- </Package>
- <Package>
- <Description>
- <全宗号>03</全宗号>
- <档号>A0092</档号>
- <案卷号></案卷号>
- <合同编号></合同编号>
- <合同代码></合同代码>
- <分部分项代号></分部分项代号>
- <单元工程代号></单元工程代号>
- <合同类型></合同类型>
- <档案类型></档案类型>
- <资料类型></资料类型>
- <分类号></分类号>
- <类目名称></类目名称>
- <案卷顺序号></案卷顺序号>
- <案卷题名>关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程</案卷题名>
- <立卷单位>关于右岸工程</立卷单位>
- <起止日期></起止日期>
- <保管期限></保管期限>
- <密级></密级>
- <文件件数></文件件数>
- <总页数></总页数>
- <卷盒宽度></卷盒宽度>
- <库位号></库位号>
- <套数></套数>
- <备注></备注>
- </Description>
- <Content>
- <Package>
- <Description>
- <全宗号>31</全宗号>
- <档号></档号>
- <档案类型></档案类型>
- <合同代码></合同代码>
- <合同类型></合同类型>
- <分部分项代号></分部分项代号>
- <单元工程代号></单元工程代号>
- <合同编号></合同编号>
- <分类号></分类号>
- <类目名称></类目名称>
- <案卷号></案卷号>
- <卷内顺序号>31</卷内顺序号>
- <文件编号></文件编号>
- <题名>关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程</题名>
- <责任者></责任者>
- <文件类别代码></文件类别代码>
- <页数></页数>
- <页次></页次>
- <保管期限></保管期限>
- <密级></密级>
- <日期></日期>
- <图纸幅面></图纸幅面>
- <版本号></版本号>
- <原文路径>
- </原文路径>
- <备注></备注>
- </Description>
- <Content>
- </Content>
- </Package>
- <Package>
- <Description>
- <全宗号>32</全宗号>
- <档号></档号>
- <档案类型></档案类型>
- <合同代码></合同代码>
- <合同类型></合同类型>
- <分部分项代号></分部分项代号>
- <单元工程代号></单元工程代号>
- <合同编号></合同编号>
- <分类号></分类号>
- <类目名