java后台解析获取到的xml格式字符串

当从页面上爬取数据时往往会得到xml格式的字符串返回值,此时解析该字符传获取自己需要的值往往是比较头疼的事,一下方式是在一个项目中用到的解析xml格式字符串的实例,记录下以便以后借鉴使用:

	    import org.jdom2.Document;
	    import org.jdom2.Element;
	    import org.jdom2.JDOMException;
	    import org.jdom2.Namespace;
	    import org.jdom2.input.SAXBuilder;
       public static void main(String[] args){
        	FmJkfwServiceImpl doc = new FmJkfwServiceImpl();
            String xml = "<?xml version=\"1.0\" encoding=\"gb2312\"?>"+
            "<Result xmlns=\"http://www.fiorano.com/fesb/activity/DBQueryOnInput2/Out\">"+      		
        "<div id=\"gs\" name=\"gs\">"+
        	"<table class=\"myTable\">"+
        		"<tr>"+
        			"<td>社会信用代码(纳税人识别号):</td>"+
        			"<td id=\"nsr1\" colspan=\"2\">915xxxxxxJ</td>"+
        			"<td>纳税人名称:</td>"+
        			"<td colspan=\"2\">四川省xxxx有限公司</td>"+
        		"</tr>"+
        		"<tr class=\"sp\">"+
        			"<td>纳税人状态:</td>"+
        			"<td colspan=\"2\">正常</td>"+
        			"<td>课征主体登记类型:</td>"+
        			"<td colspan=\"2\">单位纳税人税务登记</td>"+
        		"</tr>"+
        		"<tr class=\"sp\">"+
        			"<td>注册地址:</td>"+
        			"<td colspan=\"2\">眉山市xxxx</td>"+
        			"<td>生产经营地址:</td>"+
        			"<td colspan=\"2\">眉山市xxxx</td>"+
        		"</tr>"+
        		"<tr>"+
        			"<td>法定代表人姓名:</td>"+
        			"<td>孙xx</td>"+
        			"<td>法定代表人身份证件类型:</td>"+
        			"<td>居民身份证</td>"+
        			"<td>法定代表人身份证号码:</td>"+
        			"<td>511xxxxxxx18</td>"+
        		"</tr>"+
        		"<tr class=\"sp\">"+
        			"<td>登记日期:</td>"+
        			"<td colspan=\"2\">2016-08-1</td>"+
        			"<td>主管税务机关:</td>"+
        			"<td colspan=\"2\">国家税务总局xxxxx税务局</td>"+
        		"</tr>"+
        		"<tr>"+
        			"<td>主管税务所(科、分局):</td>"+
        			"<td colspan=\"2\">国家税务总xxxx税务分局</td>"+
        			"<td>税收管理员:</td>"+
        			"<td colspan=\"2\">李xx</td>"+
        		"</tr>"+
        		"<tr class=\"sp\">"+
        			"<td>街道乡镇:</td>"+
        			"<td colspan=\"2\">xxx镇</td>"+
        			"<td>经营范围:</td>"+
        			"<td colspan=\"2\">销售:预包装食品、散装食品、乳制品(不含婴幼儿配方乳粉)、农副产品、化工产品(不含危险化学品)、管道配件、机电设备、五金交电、文化办公用品、金属材料。(依法须经批准的项目,经相关部门批准后方可开展经营活动)</td>"+
        		"</tr>"+
        		"<tr>"+
        			"<td>营改增纳税人类型:</td>"+
        			"<td></td>"+
        			"<td>会计制度(准则):</td>"+
        			"<td>小企业会计准则</td>"+
        			"<td>办证方式:</td>"+
        			"<td>国税独立办证</td>"+
        		"</tr>"+
        		"<tr class=\"sp\">"+
        			"<td>核算方式:</td>"+
        			"<td>独立核算自负盈亏</td>"+
        			"<td>国有控股类型:</td>"+
        			"<td></td>"+
        			"<td>国有投资比例:</td>"+
        			"<td>0</td>"+
        		"</tr>"+
        		"<tr>"+
        			"<td>自然人投资比例:</td>"+
        			"<td>0</td>"+
        			"<td>外资投资比例:</td>"+
        			"<td>0</td>"+
        			"<td>注册资本:</td>"+
        			"<td>1000000</td>"+
        		"</tr>"+
        	"</table>"+
        	"<div id=\"zfs\" name=\"zfs\">"+
        	"</div>"+
        	"</div>"+
            "</Result>";
            doc.xmlElements(xml);     
        }

解析xml:

 public Map<String,Object> xmlElements(String xmlDoc) {
    	Map<String,Object> swdjxxMap = new HashMap<String,Object>();
        //创建一个新的字符串
        StringReader read = new StringReader(xmlDoc);
        //创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
        InputSource source = new InputSource(read);
        //创建一个新的SAXBuilder
        SAXBuilder sb = new SAXBuilder();
        try {
            //通过输入源构造一个Document
            Document doc = sb.build(source);
            //取的根元素
            Element root = doc.getRootElement();
            //System.out.println(root.getName());//输出根元素的名称(测试)
            //得到根元素所有子元素的集合
            List jiedian = root.getChildren();
            //获得XML中的命名空间(XML中未定义可不写)
            Namespace ns = root.getNamespace();
            Element et = null;
            List<String> swDjxxList=new ArrayList<String>();
           for(int i=0;i<jiedian.size();i++){
                et = (Element) jiedian.get(i);//循环依次得到子元素
             
                List zjiedian = et.getChildren();
                for(int j=0;j<zjiedian.size();j++){
                    Element xet = (Element) zjiedian.get(j);
                    List zjiediandian2 = xet.getChildren();
                    for(int m=0;m<zjiediandian2.size();m++){
                        Element xet2 = (Element) zjiediandian2.get(m);
                        List zjiediandian3 = xet2.getChildren();
                        for(int n=0;n<zjiediandian3.size();n++){
                            Element xet3 = (Element) zjiediandian3.get(n);
                            String tempStr=xet3.getContent().toString();
                            tempStr=tempStr.replace("[", "");
                            tempStr=tempStr.replace("]", "");
                            tempStr=tempStr.replace("Text: ", "");
                            swDjxxList.add(tempStr);
                            System.out.println( "222===="+tempStr);
                            }
                        }
                }
            }
           if(null!=swDjxxList&&swDjxxList.size()>0){
        	   swdjxxMap= makeData(swDjxxList);//提取数据 
           }else{
        	   
           }          
        } catch (JDOMException e) {
            // TODO 自动生成 catch 块
            e.printStackTrace();
        } catch (IOException e) {
            // TODO 自动生成 catch 块
            e.printStackTrace();
        }
        return swdjxxMap;
    }

抽取自己想要的数据:

public Map<String,Object> makeData(List<String> listStr) {
	Map<String,Object> swdjxxMap = new HashMap<String,Object>();
	for(int i=0;i<listStr.size();i++){
		if(i%2==0){
			String str=listStr.get(i);
			switch(str){
			case "社会信用代码(纳税人识别号):" :
				swdjxxMap.put("shxydm", listStr.get(i+1));
				break; 
			case "行业大类:" :
				swdjxxMap.put("sshy", listStr.get(i+1));
				break;
			case "登记注册类型:" :
				swdjxxMap.put("djzclx", listStr.get(i+1));
				break; 
			case "注册资本:" :
				swdjxxMap.put("zczb", listStr.get(i+1));
				break; 
			case "注册地址:" :
				swdjxxMap.put("zcdz", listStr.get(i+1));
				break; 
			case "生产经营地址:" :
				swdjxxMap.put("scjydz", listStr.get(i+1));
				break; 
			case "经营范围:" :
				swdjxxMap.put("jyfw", listStr.get(i+1));
				break; 	
			case "登记日期:" :
				swdjxxMap.put("cxsj", makeDate(listStr.get(i+1)));//跟当前时间求差算出时间  待处理
				break; 
			case "法定代表人姓名:" :
				swdjxxMap.put("fddbrxm", listStr.get(i+1));
				break; 
			case "法定代表人移动电话:" :
				swdjxxMap.put("fddbryddh", listStr.get(i+1));
				break;
			case "办税人姓名:" :
				swdjxxMap.put("bsrxm", listStr.get(i+1));
				break; 
			case "办税人移动电话:" :
				swdjxxMap.put("bsryddh", listStr.get(i+1));
				break; 
			case "财务负责人姓名:" :
				swdjxxMap.put("cwfzrxm", listStr.get(i+1));
				break; 
			case "财务负责人移动电话:" :
				swdjxxMap.put("cwfzryddh", listStr.get(i+1));
				break; 
			default : //可选
				//语句
			}
		}
	}
	return swdjxxMap;
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值