java解析非标准xml文件

test.xml:

<ns:getAllResourceDetailResponse xmlns:ns="http://ws.cms.ivms6.hikvision.com">
    <ns:return>
        <?xml version="1.0" encoding="UTF-8" ?>
        <table>
            <head>
            <result result_code="0" message="成功" size="3" />
            </head>
            <rows>
            <row i_id="1" c_classname="Organization1" c_index_code="36080100"  />
            <row i_id="3" c_classname="Organization2" c_index_code="36080101"/>
            <row i_id="4" c_classname="Organization3" c_index_code="36080102" />
            </rows>
        </table>
    </ns:return>
</ns:getAllResourceDetailResponse>

 

1. 利用正则表达式截取字符串:
StringBuffer sb = new StringBuffer();
Reader reader = null;
BufferedReader br = null;
try {
    reader = new FileReader("d:/test.xml");
    br = new BufferedReader(reader);
    String data = null;
    while ((data = br.readLine()) != null) {
        sb.append(data);
    }
} catch (IOException e) {
    e.printStackTrace();
}

System.out.println(sb.toString());

String regex = "<rows>(.*?)</rows>";
Pattern pattern = Pattern.compile (regex);
Matcher match = pattern.matcher (sb);
String xmlStr = "";
while (match.find ())
{
    xmlStr = match.group ();
}

 

转换成java对象:

CityList cityList = (CityList) XmlBuilder.xmlStrToObject(CityList.class, xmlStr);

 

XmlBuilder.java:

package com.example.demo1.xml;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import java.io.Reader;
import java.io.StringReader;

public class XmlBuilder {
 
    /**
     * 将XML转为指定的POJO对象
     *
     * @param clazz 需要转换的类
     * @param xmlStr xml数据
     * @return
     */
    public static Object xmlStrToObject(Class<?> clazz, String xmlStr) throws Exception {
        Object xmlObject = null;
        Reader reader = null;
        //利用JAXBContext将类转为一个实例
        JAXBContext context = JAXBContext.newInstance(clazz);
        //XMl 转为对象的接口
        Unmarshaller unmarshaller = context.createUnmarshaller();
        reader = new StringReader(xmlStr);
        xmlObject = unmarshaller.unmarshal(reader);
        if (reader != null) {
            reader.close();
        }
        return xmlObject;
    }
}

cityList.java:

package com.example.demo1.xml;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
@XmlRootElement(name = "rows")
@XmlAccessorType(XmlAccessType.FIELD)
public class CityList {
 
    @XmlElement(name = "row")
    private List<City> cityLst;
 
}

 

City.java

package com.example.demo1.xml;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;

@Data
@AllArgsConstructor
@NoArgsConstructor
@XmlRootElement(name = "row")
@XmlAccessorType(XmlAccessType.FIELD)
public class City {
    @XmlAttribute(name = "i_id")
    private String cityId;
    @XmlAttribute(name = "c_classname")
    private String cityName;
    @XmlAttribute(name = "c_index_code")
    private String cityCode;
}

 

maven依赖包:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.8</version>
    <scope>provided</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
<dependency>
    <groupId>dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>1.6.1</version>
</dependency>

 

 利用SAXReader解析xml:

SAXReader reader = new SAXReader();
Document document = reader.read(new File("d:/test.xml"));
Element rootElt = document.getRootElement();
System.out.println(rootElt.getName());
Element tableElt = rootElt.element("rows");
System.out.println(tableElt.getName());

Iterator iter = tableElt.elementIterator("row");
while (iter.hasNext()){
    Element itemEle = (Element) iter.next();
    String id = itemEle.attribute("i_id").getValue();

    System.out.println(id);
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值