package com.app.duapp;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.jsoup.Jsoup;
import org.jsoup.select.Elements;
import com.app.common.FileUtil;
import com.app.entity.duapp.Address;
import com.app.entity.duapp.Location;
import com.app.entity.duapp.Point;
import com.app.entity.duapp.Pois;
/**
* @author liangjilong
*/
@SuppressWarnings("all")
public class JsoupDom {
//private static String url = "http://api.map.baidu.com/geocoder/v2/?ak=E4805d16520de693a3fe707cdc962045&callback=renderReverse&location=39.983424,116.322987&output=xml&pois=1";
private static String url = "http://liangjilong.duapp.com/it/xml.xml";
public static void main(String[] args)throws Exception {
String filepath="D:/map.xml";
List<Pois> list=JsoupReadXml(url,null);
String xml=createAsXml(list);
write(xml,filepath);
}
/**
* Dom4j组装xml数据
* @param html
* @return
*/
private static String createAsXml(List<Pois> list) throws Exception{
org.dom4j.Document doc=DocumentHelper.createDocument();
Element root=doc.addElement("GeocoderSearchResponse");//根
root.addElement("status").setText("0");//status
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
Pois pois = (Pois) iterator.next();
Element result=root.addElement("result");//result
List<Location> listLoc=pois.getLocations();
Element location=result.addElement("location");//location
for (Iterator iterator2 = listLoc.iterator(); iterator2.hasNext();) {
Location locObj = (Location) iterator2.next();
location.addElement("lat").setText(locObj.getLat()+"");//lat
location.addElement("lng").setText(locObj.getLng()+"");//lat
result.addElement("formatted_address").setText(locObj.getFormattedAddress()+"");//formatted_address
result.addElement("business").setText(locObj.getBusiness()+"");//business
}
List<Address> listAdd=pois.getAddress();
Element comp=result.addElement("addressComponent");//addressComponent
for (Iterator iterator3 = listAdd.iterator(); iterator3.hasNext();) {
Address address = (Address) iterator3.next();
comp.addElement("streetNumber").setText(address.getStreetNumber()+"");//streetNumber
comp.addElement("street").setText(address.getStreet()+"");//street
comp.addElement("district").setText(address.getDistrict()+"");//district
comp.addElement("city").setText(address.getCity()+"");//city
comp.addElement("province").setText(address.getProvince()+"");//province
comp.addElement("cityCode").setText(address.getCityCode()+"");//cityCode
}
Element poi=result.addElement("pois").addElement("poi");
poi.addElement("addr").setText(pois.getAddr());//addr
poi.addElement("distance").setText(pois.getDistance());//distance
poi.addElement("name").setText(pois.getName());//name
poi.addElement("poiType").setText(pois.getPoiType());//poiType
poi.addElement("tel").setText(pois.getTel());//tel
poi.addElement("zip").setText(pois.getZip());//zip
List<Point> listPoint=pois.getPoints();
Element point=poi.addElement("point");
for (Iterator iterator4 = listPoint.iterator(); iterator4.hasNext();) {
Point p = (Point) iterator4.next();
point.addElement("x").setText(p.getX()+"");
point.addElement("y").setText(p.getY()+"");
}
}
return doc.asXML();
}
/**
* 一对多的解析http://jilongliang.iteye.com/blog/1906728
*
* 用Jsoup去解析xml
* @param params
*/
private static List<Pois> JsoupReadXml(String params,String flag) throws Exception{
List<Pois> list=new ArrayList<Pois>();
org.jsoup.nodes.Document doc=Jsoup.connect(params).get();//网络连接
//org.jsoup.nodes.Document doc=Jsoup.parse(params);//本地数据,连接关闭就可以调用
if(doc!=null)
{
Elements pois=doc.select("poi");//获取到poi节点
for(org.jsoup.nodes.Element poi:pois){
Pois p=new Pois();
String addr=poi.getElementsByTag("addr").text().trim();
p.setAddr(addr);
String distance=poi.getElementsByTag("distance").text().trim();
p.setDistance(distance);
String name=poi.getElementsByTag("name").text().trim();
p.setName(name);
String poiType=poi.getElementsByTag("poiType").text().trim();
p.setPoiType(poiType);
String tel=poi.getElementsByTag("tel").text().trim();
p.setTel(tel);
String zip=poi.getElementsByTag("zip").text().trim();
p.setZip(zip);
List<Point> listPoint=new ArrayList<Point>();
Point point=new Point();
String x=poi.getElementsByTag("x").text().trim();
point.setX(x);
String y=poi.getElementsByTag("y").text().trim();
point.setY(y);
listPoint.add(point);
p.setPoints(listPoint);
List<Address> listAdd=new ArrayList<Address>();
Elements comps=doc.select("addressComponent");
for (org.jsoup.nodes.Element comp:comps) {
Address add=new Address();
String streetNumber=comp.getElementsByTag("streetNumber").text().trim();
add.setStreetNumber(streetNumber);
String street=comp.getElementsByTag("street").text().trim();
add.setStreet(street);
String district=comp.getElementsByTag("district").text().trim();
add.setDistrict(district);
String city=comp.getElementsByTag("city").text().trim();
add.setCity(city);
String province=comp.getElementsByTag("province").text().trim();
add.setProvince(province);
listAdd.add(add);
}
p.setAddress(listAdd);
List<Location> listLoc=new ArrayList<Location>();
Elements location=doc.select("location");
for (org.jsoup.nodes.Element obj:location) {
Location locat=new Location();
String lat=obj.getElementsByTag("lat").text().trim();
locat.setLat(lat);
String lng=obj.getElementsByTag("lng").text().trim();
locat.setLng(lng);
String formatted_address=obj.getElementsByTag("formatted_address").text().trim();
locat.setFormattedAddress(formatted_address);
String business=doc.select("business").text().trim();
locat.setBusiness(business);
listLoc.add(locat);
}
String status=doc.select("status").text().trim();
p.setStatus(status);
p.setLocations(listLoc);
list.add(p);
}
}
return list;
}
public static boolean write(String content, String htmlPath) {
boolean flag = true;
try {
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlPath), "UTF-8"));
out.write("\n" + content);
out.close();
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
return flag;
}
}
分享到:
相关推荐
在压缩包文件"JsoupDemo"和"Jsoup"中,可能包含了使用Jsoup进行DOM解析的示例代码。这些代码通常会展示如何连接到URL,选择元素,提取数据,以及进行一些基本的DOM操作。通过阅读和运行这些示例,你可以更深入地了解...
Jsoup是由Jonas Bonér创建的开源项目,它基于Java标准库的DOM解析器,但提供了更友好的API。要使用Jsoup,首先需要将其添加到你的项目依赖中。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml ...
从这个项目中,你可以学习到如何在Java环境中设置和使用DOM解析器以及Jsoup库来处理XML数据。DOM解析适用于需要深度遍历和复杂操作的场景,而Jsoup则在处理HTML和简单XML时表现出更高的灵活性和易用性。通过实践这两...
Jsoup是一款Java库,设计用于处理HTML和XML文档,它提供了非常方便的API来抓取、解析、修改以及清理HTML...然而,如果需要更高级的XML处理功能,如XPath表达式支持,可能需要考虑使用更专业的XML库,如JAXB或DOM4J。
在给定的资源中,我们可以看到一个使用jsoup解析XML文件的简单示例。 首先,我们来理解jsoup的基本用法。jsoup的核心类是`org.jsoup.Jsoup`,它提供了从字符串、URL或文件加载HTML或XML文档的方法。例如,要解析XML...
4. **链接处理**:jsoup可以解析并提取出文档中的链接,包括相对和绝对URL。它还可以进行链接规范化,确保所有链接都能正确指向目标资源。 5. **安全清理**:为了防止XSS(跨站脚本攻击),jsoup提供了安全的HTML...
然而,对于复杂的XML文档,可能需要更专业的库如JDOM或DOM4J。 ```java Document doc = Jsoup.parse(xmlString, "text/xml", "", Parser.xmlParser().namespaceAware(true)); ``` ### 5. 性能优化 对于大量XML...
在本案例中,我们将讨论如何使用Jsoup解析特定城市的数据,这些数据可能是通过XML格式提供的。XML(可扩展标记语言)是一种结构化的数据存储方式,常用于网络数据交换。在IT领域,理解和操作XML文档是至关重要的技能...
4. `示例代码`:可能包含一些示例代码,帮助初学者快速理解和上手使用Jsoup。 通过学习和掌握Jsoup库,开发者可以有效地处理HTML和XML文档,提高开发效率,简化复杂的数据提取任务。无论是进行网页爬虫开发,还是...
它提供了非常方便的API,用于提取和操作数据,使用DOM、CSS以及类似于jQuery的方法。在JavaScript中,我们通常会使用jQuery来操作DOM,但在服务器端或Java环境中,JSoup就是这样一个强大的工具,它使得处理HTML文档...
Jsoup的核心功能是解析HTML文档,并将其转化为一个DOM(Document Object Model)结构,这样我们就可以像操作XML一样操作HTML元素。DOM是一个树形结构,每个HTML标签都是树中的一个节点。Jsoup提供了丰富的API,如...
本文将深入探讨如何使用Jsoup解析HTML,并根据解析结果来修改文件名。我们将通过一个简单的示例来展示这个过程。 首先,我们需要理解Jsoup的基本用法。Jsoup库提供了一个强大的API,可以方便地解析HTML文档,提取...
dom4j,jsoup,jdom,w3cdom,xstream使用代码工程 package ivyy.taobao.com.dom4j; import ivyy.taobao.com.entity.Address; import ivyy.taobao.com.entity.Location; import ivyy.taobao.com.entity.Point; import ...
如果网页内容依赖JavaScript,可能需要使用如Selenium这样的工具先运行页面,再用jsoup解析生成的HTML。 **总结** jsoup是Java中处理HTML的强大工具,其简单易用的API使得网页解析变得轻松。通过学习和实践,你...
在Java项目中使用JSoup,首先需要将JSoup的JAR文件添加到项目的类路径中,或者如果你的项目是Maven或Gradle项目,可以在pom.xml或build.gradle文件中添加对应的依赖。例如,在Maven项目中,可以在pom.xml文件中添加...
这一步骤可能涉及到XPath或XSLT,尽管这些不是JSoup内置的功能,但可以通过集成其他Java XML库(如JAXB或DOM4J)实现。 4. **转化结果为HTML**:最后,校验的结果可能以HTML的形式呈现,以便用户能以友好的格式查看...
3. **XML解析库**:解析返回的XML数据,可能使用了Java内置的DOM或SAX解析器,或者第三方库如Jsoup、TinyXML或PullParser等。DOM解析器便于整体理解数据,SAX解析器则适合流式处理。 4. **数据绑定**:解析后的数据...
- **解析文档**:调用`get()`方法获取HTML字符串,然后使用`Jsoup.parse(html)`解析为`Document`对象。 - **选择元素**:使用CSS选择器选择文档中的元素,如`doc.select("selector")`。 - **操作元素**:获取元素...
JSoup是一款Java库,它为了解析HTML和XML文档而设计,提供了简单易用的API,使得开发者可以方便地抓取和操作网页内容。这个库的强大之处在于它能理解HTML的复杂性,同时提供了一种结构化的、面向DOM的方式来处理网页...
不过,这通常会涉及到使用Jsoup进行更复杂的网页解析,例如查找特定元素、提取链接、筛选文本等。你可以使用Jsoup的各种选择器方法,如`select()`,来定位HTML元素: ```java Elements links = doc.select("a[href]...