最近研究java爬虫,Get请求后取得数据为String类型的xml数据,尝试了许久的解析,因此做个小记录。
xml数据如下(String类型):
<?xml version="1.0" encoding="UTF-8"?>
<hello>
<a>123456</a>
<g>0064542</g>
<co>DE</co>
<f>143</f>
<ok>0</ok>
<error></error>
<tr>
<ztt>
<riqi>2019-03-07</riqi>
<sj>20:21:00</sj>
<zt> zugestellt</zt>
<add></add>
</ztt>
<ztt>
<riqi>2019-03-07</riqi>
<sj>15:12:00</sj>
<zt>Die </zt>
<add></add>
</ztt>
<ztt>
<riqi>2019-03-07</riqi>
<sj>10:13:00</sj>
<zt>Die Send</zt>
<add>Neumark</add>
</ztt>
<ztt>
<riqi>2019-03-01</riqi>
<sj>22:03:24</sj>
<zt>Custom clearance completed</zt>
<add>DE</add>
</ztt>
</tr>
<status>7</status>
<notra>yes</notra>
</hello>
目的是为了拿到中间几串相同格式的字符串数据,博主首先考虑了JavaSchool学习网站中的方法来尝试javaString 转xml的方式:
关键代码:String xml = “”;//指上诉数据
Document doc = DocumentHelper.parseText(xml);
Element root = doc.getRootElement();
需要导入jar包:
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
并再pom.xml中添加依赖:
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
但是之后不止如何将它解析为list,最后选择了暴力解析。
1.先用String切割,去掉头尾字符串,只留有用的中间数据,
String result = xml.substring(response.indexOf("<tr>") + 1,xml.lastIndexOf("</tr"));
再转: org.jsoup.nodes.Document doc = Jsoup.parse(result);
最后用 getElementsByTag("")
选择标签的方式将它提取了出来。
还有一个转的方式:
//将xml转为json
JSONObject jsonXML = XML.toJSONObject(response);