XML 解析工具类

 

package etax.server.frame.util;

/**
 * <p>Title: BFCP</p>
 * <p>Description: 多元化电子报税业务流程控制平台</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company:</p>
 * @author gaoweibo
 * @version V 2010
 */

import java.io.ByteArrayInputStream;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;

public class XmlTool {

 /**
  *
  * @param xmlStr
  *            传入xml串
  * @return 将xml串解析成Hashtable
  * @throws Exception
  *             解析失败
  */
 public Hashtable LoadHashtableFromXml(String xmlStr) throws Exception {
  ByteArrayInputStream Xmlbyte = null;
  Hashtable xmlht = new Hashtable();

  SAXBuilder builder = new SAXBuilder(false);
  try {
   Xmlbyte = new ByteArrayInputStream(xmlStr.getBytes("GB2312"));
   Document doc = builder.build(Xmlbyte);
   Element root = doc.getRootElement();
   getDateFromElement(xmlht, root);
  } catch (Exception e) {
   e.printStackTrace();
   throw new Exception("解析XML失败:" + e);
  }
  return xmlht;
 }

 /**
  *
  * @param xmlStr
  *            传入xml串
  * @return 第一层子节点。
  * @throws Exception
  * @注释:适用于一个xml串中包含主、附表的信息。要求以表(子节点)为逻辑单元,分别进行解析,读取数据。
  */
 public Hashtable LoadHashtableFromXml(Hashtable ht, String xmlStr)
   throws Exception {
  ByteArrayInputStream Xmlbyte = null;
  List elements = null;

  SAXBuilder builder = new SAXBuilder(false);
  try {
   Xmlbyte = new ByteArrayInputStream(xmlStr.getBytes("GB2312"));
   Document doc = builder.build(Xmlbyte);
   Element root = doc.getRootElement();
   return FindElement(ht, root);
  } catch (Exception e) {
   e.printStackTrace();
   throw new Exception("解析XML失败:" + e);
  }
 }

 public Hashtable FindElement(Hashtable ht, Element element)
   throws Exception {
  List elements = element.getChildren();
  for (Iterator iter = elements.iterator(); iter.hasNext();) {
   Element ele = (Element) iter.next();
   String name = ele.getName();
   if (ht.containsKey(name)) { // 找到节点,将节点内的数据作为一个逻辑整体,转换为Hashtable
    Hashtable xmlht = new Hashtable();
    getDateFromElement(xmlht, ele);
    ht.put(name, xmlht);
   } else {
    if (ele.hasChildren()) {
     FindElement(ht, ele);
    } else {
     continue;
    }

   }
  }
  return ht;
 }

 /**
  * 从doc中提取数据
  */
 public void getDateFromElement(Hashtable xmlht, Element nextEle)
   throws Exception {

  List list = null;
  List l = null;
  Element ele = null;
  String name = null;
  try {
   if (nextEle == null) {
    return;
   }
   list = nextEle.getChildren();
   for (int i = 0; i < list.size(); i++) {
    ele = (Element) list.get(i);
    l = ele.getChildren();
    name = ele.getName();
    if (l != null && l.size() > 0) {
     getDateFromElement(xmlht, ele);
    } else {
     String data = new String(getNodeValue(ele).getBytes("GBK"),"ISO-8859-1");
     Vector v = null;
     v = (Vector) xmlht.get(name);
     if (v == null) {
      v = new Vector();
     }
     v.add(data);
     xmlht.put(name, v);
    }
   }
  } catch (Exception e) {
   throw e;
  }
 }

 private String getNodeValue(Element node) {
  if (node == null) {
   return "";
  } else if (node.getText().trim().equalsIgnoreCase("null")) {
   return "";
  } else {
   return node.getText();
  }
 }

 public static void main(String []args) {

  String xmlStr = "<?xml version=\"1.0\" encoding=\"GB2312\"?>";
  xmlStr = xmlStr + "<BFCP>";
  xmlStr = xmlStr + "<ServiceName>taxKernel.SB_ZCFZBBean</ServiceName>";
  xmlStr = xmlStr + "<JBXX>";
  xmlStr = xmlStr + "<NSRSBH>320200835920438</NSRSBH>";
  xmlStr = xmlStr + "<NSRPWD>1</NSRPWD>";
  xmlStr = xmlStr + "<SSSQ_Q>20090301</SSSQ_Q>";
  xmlStr = xmlStr + "<SSSQ_Z>20090331</SSSQ_Z>";
  xmlStr = xmlStr + "</JBXX>";
  xmlStr = xmlStr + "<ZCFZB>";
  xmlStr = xmlStr + "<LN01>";
  xmlStr = xmlStr + "<NCS>967624.01</NCS>";
  xmlStr = xmlStr + "<QMS>299172.78</QMS>";
  xmlStr = xmlStr + "</LN01>";
  xmlStr = xmlStr + "<LN02>";
  xmlStr = xmlStr + "<NCS>0</NCS>";
  xmlStr = xmlStr + "<QMS>0</QMS>";
  xmlStr = xmlStr + "</LN02>";
  xmlStr = xmlStr + "<LN03>";
  xmlStr = xmlStr + "<NCS>0</NCS>";
  xmlStr = xmlStr + "<QMS>0</QMS>";
  xmlStr = xmlStr + "</LN03>";
  xmlStr = xmlStr + "</ZCFZB>";
  xmlStr = xmlStr + "</BFCP>";
  Hashtable ht = new Hashtable();
  ht.put("JBXX", "");
  ht.put("ZCFZB", "");
  XmlTool tool = new XmlTool();
  
  try{
   tool.LoadHashtableFromXml(ht, xmlStr);
   System.out.println(ht.get("JBXX"));
   System.out.println(ht.get("ZCFZB"));
  }catch(Exception e){
   System.out.println(e.getMessage());
  }
 }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值