采用DOM4J中的SAXReader解析webservice返回的XML文件
2011-12-16 14:30
525 查看
1. 通过URL连接GET返回的webservice内容,如下代码:
2. 通过如下的方法解析XML中的内容
3. 获取的XML内容为:
String str = FORECAST_WEATHER_URL + this.getPYName(exter.getCity_code()); log.info("天气预报查询str is " + str); URL url = new URL(str); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.setUseCaches(false); conn.setConnectTimeout(15000); conn.setReadTimeout(15000); conn.setRequestMethod("GET"); InputStream in = conn.getInputStream(); // FileInputStream in = new FileInputStream(new File("d:/weather.xml")); byte[] bytes = IoUtil.InputStreamToByte(in); InputStream inputStream = new ByteArrayInputStream(bytes); InputStreamReader strInStream = new InputStreamReader(inputStream, "GBK"); SAXReader reader = new SAXReader(); // reader.setEncoding("UTF-8"); Document doc = reader.read(strInStream); //进行当天天气预报的查询 List currentList = XMLParseUtil.getParseMapFromXMLStream(doc,XMLPathConstants.CURRENT_WEATHER_XPATH); //进行未来天气预报的查询 List forecastList = XMLParseUtil.getParseMapFromXMLStream(doc,XMLPathConstants.FORECAST_WEATHER_XPATH);
public final static String CURRENT_WEATHER_XPATH = "//xml_api_reply/weather/current_conditions"; public final static String FORECAST_WEATHER_XPATH = "//xml_api_reply/weather/forecast_conditions";
2. 通过如下的方法解析XML中的内容
public static List getParseMapFromXMLStream(Document doc,String parentPath) throws DocumentException { List rowList = doc.selectNodes(parentPath); Map map = null; List list = null; if(rowList != null && rowList.size() >0) { map = new HashMap(); list = new ArrayList(); for(Iterator iter = rowList.iterator();iter.hasNext();){ //获得具体的节点的父元素 Element element = (Element)iter.next(); //获得具体的节点的父元素的属性 // List elementList = element.attributes(); // for(Iterator iter1 = elementList.iterator();iter1.hasNext();){ // //将每个属性转化为一个抽象属性,然后获取其名字和值 // AbstractAttribute aa = (AbstractAttribute)iter1.next(); // System.out.println("Name:"+aa.getName()+";Value:"+aa.getValue()); // } // 如果element下有子元素,(类似width="**"),要想获得该子元素的值,可以用如下方法 // System.out.println(element.elementText("test")); //获得父节点内的各种借点或者属性 Iterator it1 = element.elementIterator(); while(it1.hasNext()) { Element element1 = (Element)it1.next(); //获得子节点的所有列表 List elementList1 = element1.attributes(); for(Iterator it2 = elementList1.iterator();it2.hasNext();){ //将每个属性转化为一个抽象属性,然后获取其名字和值 AbstractAttribute aa = (AbstractAttribute)it2.next(); // System.out.println("Name11:"+aa.getName()+";Value11:"+aa.getValue()); //这边需要添加借点的名字为KEY的值(重要) map.put(element1.getName(), aa.getValue()); } } list.add(map); } } return list; }
3. 获取的XML内容为:
<?xml version="1.0"?> <xml_api_reply version="1"> <weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0" > <forecast_information> <city data="Xiamen, Fujian"/> <postal_code data="Xiamen"/> <latitude_e6 data=""/> <longitude_e6 data=""/> <forecast_date data="2011-12-15"/> <current_date_time data="2011-12-15 16:00:00 +0000"/> <unit_system data="SI"/> </forecast_information> <current_conditions> <condition data="多云"/> <temp_f data="64"/><temp_c data="18"/> <humidity data="湿度: 68%"/> <icon data="/ig/images/weather/mostly_cloudy.gif"/> <wind_condition data="风向: 东北、风速:5 米/秒"/> </current_conditions> <forecast_conditions> <test>测试用的</test> <day_of_week data="周四"/> <low data="13"/><high data="22"/> <icon data="/ig/images/weather/mostly_sunny.gif"/> <condition data="以晴为主"/> </forecast_conditions> <forecast_conditions> <day_of_week data="周五"/> <low data="11"/><high data="16"/> <icon data="/ig/images/weather/mostly_sunny.gif"/> <condition data="以晴为主"/> </forecast_conditions> <forecast_conditions> <day_of_week data="周六"/> <low data="11"/><high data="18"/> <icon data="/ig/images/weather/mostly_sunny.gif"/> <condition data="以晴为主"/> </forecast_conditions> <forecast_conditions> <day_of_week data="周日"/> <low data="14"/><high data="21"/> <icon data="/ig/images/weather/mostly_sunny.gif"/> <condition data="以晴为主"/> </forecast_conditions> </weather> </xml_api_reply>
相关文章推荐
- Java生成和解析XML格式文件和字符串的实例代码【dom4j中的SAXReader对象读取并解析xml文件】
- Java dom4j解析RESTFull风格发布的WebService的xml文件
- axis2远程调用webservice例子(返回xml用dom4j解析)
- org.dom4j.io.SAXReader解析xml
- 用SAXReader文档解析XML文件
- java--DOM4j-SAXReader对xml文档的解析2
- Java dom4j saxReader解析xml
- Dom4j SAXReader读取xml异常时占用文件,导致不能移动文件
- 利用Dom4J的SAXReader解析大文件
- 通过SaxReader解析xml配置文件(上班第一天)
- java中采用dom4j解析xml文件
- XML文件解析-SaxReader
- java--DOM4j-SAXReader对xml文档的解析2
- SAXReader saxReader = new SAXReader();来解析xml文件
- xml--dom4j SAXReader解析
- 采用Dom4j及xpath解析xml文件
- Java dom4j解析RESTFull风格发布的WebService的xml文件
- Java dom4j解析RESTFull风格发布的WebService的xml文件
- dom4j来解析xml,通过URL获取服务器端返回的字符串,java swing 实现的页面
- soap 返回xml 文件 soap 文件 webservice wsdl