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); }