使用jdom解析xml

原创 2007年10月10日 10:00:00

在项目中,因为需要解析xml,因此做了一部分工作,写了个工具类,以备以后使用:

XmlInfo.java:

 

 

/**//*
 * TreePrinter.java
 * 创建日期 2007-4-23
 * @author: liaoyuan 
 * 
 
*/

package com.sac.common;

import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
import org.xml.sax.InputSource;

/** *//**
 * 
 * XmlInfo
 * 
@author liaoyuan
 * @mailto:yuan.liao@broha.com
 * 2007-4-24  10:43:33
 *
 
*/

public class XmlInfo ...{
    
private static final String ENCODING = "gb2312";

    
public static ArrayList anaylzXml(Document document, String nodeName) ...{
        ArrayList arrylist 
= new ArrayList();
//        List list = document.getRootElement().getChild(nodeName).getChildren();
        List list = document.getRootElement().getChildren();

        
for (int i = 0; i < list.size(); i++...{
            Map map 
= new HashMap();
            Element child 
= (Element) list.get(i);
            inspect2(child, map);
// 调用
            arrylist.add(map);
        }

        
return arrylist;
    }


    
public static void inspect2(Element element, Map map) ...{
        
if (!element.isRootElement()) ...{
            
//            System.out.println();
        }

        
if (!element.hasChildren()) ...{
            String qualifiedName 
= element.getName();
            map.put(qualifiedName, element.getText());
            
//            System.out.println(qualifiedName + ":" + element.getText());
        }
 else ...{
            List list 
= element.getContent();
            Iterator iterator 
= list.iterator();
            
while (iterator.hasNext()) ...{
                Object o 
= iterator.next();
                
if (o instanceof Element) ...{// 如果是子元素
                    Element child = (Element) o;
                    inspect2(child, map);
// 递归调用
                }

            }

        }

    }


    
//jdom String 转换成document
    public static Document String2Doc(String content) throws IOException,
            JDOMException 
...{

        
//创建输入源
        InputSource input = new org.xml.sax.InputSource(new StringReader(content));
        
//创建DOM解析器
        SAXBuilder parser = new SAXBuilder();
        
//解析文档

        Document document 
= parser.build(input);

        
//返回文档
        return document;
    }

    
/** *//**
     * 将文档对象输出为字符串
     * 
     * 
@param document
     *            文档对象
     * 
@return
     
*/

    
public static String toXMLString(Document document) ...{
        
return toXMLString(document, true);
    }

    
//jdom document 转换成 String
    public static String toXMLString(Document document, boolean bFormated) ...{
        
try ...{
            XMLOutputter outputformat 
= new XMLOutputter(" ", bFormated,
                    ENCODING);

            
return outputformat.outputString(document);
        }
 catch (Exception exception) ...{
            
return null;
        }

    }


    
/** *//**
     * 用于调用OA查询接口,返回所需字段值,封装于map
     * 默认取第一条值
     * 
@param content
     * 
@return
     * 
@throws Exception
     
*/

    
public static Map returnMap(String content) throws Exception ...{
        Map map 
= null;
        ArrayList list 
= null;

        Document document 
= String2Doc(content);
        
//            System.out.println("****** " + toXMLString(document,false));
        list = anaylzXml(document, "ReturnData");
        
if(list!=null)
            map
=(Map)list.get(0);
        System.out.println(
"list=== " + list);

        
return map;
    }


    
/** *//**
     * 用于调用OA查询接口,返回多条记录 所需字段值,封装于ArrayList
     * 默认取第一条值
     * 
@param content
     * 
@return
     * 
@throws Exception
     
*/

    
public static ArrayList returnList(String content) throws Exception ...{        
        ArrayList list 
= null;

        Document document 
= String2Doc(content);        
        list 
= anaylzXml(document, "ReturnData");
        
        System.out.println(
"list=== " + list);

        
return list;
    }

    
    
public static Document loadDoc(String url) throws JDOMException ...{
        
if (StringUtils.isEmpty(url))
            url 
= "D:/task/jars/test1.xml";
        SAXBuilder parser 
= new SAXBuilder();
        Document document 
= parser.build(url);
        
return document;
    }


    
public static void main(String[] args) ...{

        
try ...{
            String content 
= toXMLString(loadDoc(null), false);
            Map map 
= returnMap(content);
        }
 catch (Exception e) ...{
            e.printStackTrace();
        }


    }


}

 

inspect2 此方法循环调用,遍历所有子节点元素.

 

 

//解析XML,content 字符串流,tablename 要循环遍历的节点
    public static Vector opStringXml(String content,String tablename) throws Exception ...{
        Vector vect
=null;

        
if(StringUtils.isEmpty(content))...{            
            
throw new Exception("输入内容为空!");            
        }

        
        Document doc
=XMLHelper.String2Doc(content);   
        
if(doc==null)    return null;
        
        Element root 
= doc.getDocumentElement(); //根元素

        vect
=new Vector();
        
        NodeList rootname 
= root.getElementsByTagName(tablename);
//        NodeList rootname = root.getChildNodes();
        if (rootname != null...{
            
for (int i = 0; i < rootname.getLength(); i++...{//循环遍历数据节点                                        
                Map propertyCache=new HashMap();
                
                Element simple 
= (Element) rootname.item(i);
                
                NodeList aa 
= simple.getChildNodes();
                
for(int j=0;j<aa.getLength();j++)...{
                    
try...{
                        Node n 
= (Node)aa.item(j);
                        
if(n !=null)...{
                            
if(!n.getNodeName().equals("#text"))...{
//                                System.out.println("j="+j);
                                if(n.getFirstChild()!=null)...{
                                    propertyCache.put(n.getNodeName().trim(),n.getFirstChild().getNodeValue().trim());
                                }

                                
                            }

                        }

                        
                    }
catch(Exception e)...{
                        e.printStackTrace();
                    }

                }

                vect.add(propertyCache);
            }

        }

        
return vect;
    }

 

 

使用Jdom解析XML

关于使用jdom解析xml
  • u011526599
  • u011526599
  • 2016-10-23 17:27:31
  • 2496

Jdom操作、创建和解析XML

需要导入Jdom的一个jar包; 1、Jdom创建XML package com.shengsiyuan.jdom; import java.io.FileWriter; import org...
  • HarderXin
  • HarderXin
  • 2012-02-23 09:29:57
  • 3922

jdom解析xml文件简单实例

Java解析XML的四种方法—DOM/SAX/jdom/dom4j 为什么要用JDOM?  JDOM是网上流行开源的XML的操作类,用起来简单方便.与他对应的还有几个非常流行的框架,dom4j也是...
  • abc19900828
  • abc19900828
  • 2014-09-22 17:05:52
  • 3332

【java】jdom解析xml文件

java中有四种分别解析xml文件。分别是,DOM,SAX,DOM4J,JDOM四种。我第一篇就介绍用Jdom解析XML。本人觉得这四种学习其中一种即可。其余三中解析思想差不了多少。况且这四种介绍优缺...
  • zlxdream815
  • zlxdream815
  • 2012-12-05 16:13:01
  • 5908

JDOM生成、解析XML实例

import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j...
  • u012152619
  • u012152619
  • 2015-01-21 08:43:59
  • 3418

JDom解析和生成XML文档

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本人声明。否则将追究法律责任。 作者:永恒の_☆ 地址:http://blog.csdn.net/chenghui0317...
  • ch656409110
  • ch656409110
  • 2013-09-28 18:58:21
  • 7785

使用Jdom解析xml格式字符串

package controllers; import java.io.Reader; import java.io.StringReader; import java.util.Iterator;...
  • xd123softwarec520sdn
  • xd123softwarec520sdn
  • 2012-06-12 15:04:04
  • 708

jdom生成与解析xml详解

最近关注JDom,转载一下觉得不错的文章,方便以后阅读,在此感谢网路上朋友们共享的好文档! ----------------以下内容为转载---------------------- ...
  • a519781181
  • a519781181
  • 2016-07-29 14:13:05
  • 953

使用JDOM方式解析XML

一、需要导入JDOM的jar包下载地址二、XML文件 三、开始解析public class JDOMTest { public static void main(String[] args) ...
  • L_in12
  • L_in12
  • 2016-07-14 17:29:41
  • 666

在JSP开发中使用jdom解析临时存放数据的XML文件

    在我工作过程中,遇到了对临时存储产品信息的XML文件进行操作的问题.其中就有对XML文件的解析操作,考虑到用DOM或SAX比较麻烦,于是我选择了用jdom进行解析.因为我的XML文件结构比较简...
  • chensheng913
  • chensheng913
  • 2005-06-29 10:01:00
  • 6276
收藏助手
不良信息举报
您举报文章:使用jdom解析xml
举报原因:
原因补充:

(最多只允许输入30个字)