通过下面的yahoo api搜索,得到的xml,如何一行一行输出出来:public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
{
//定义Yahoo的搜索Web Service的访问URL的基本部分
String baseUrl = "http://api.search.yahoo.com/WebSearchService/V1/webSearch?appid=YahooDemo&ei=gb2312&type=all";
//获得客户的查询关键字
String query = request.getParameter("query");
//对query进编码转换
query = new String(query.getBytes("ISO8859-1"),"gb2312");
//对query进URL编码
query = URLEncoder.encode(query,"gb2312");
//构造出查询关键字参数
query = "&query="+query;
//获得客户的记录数
String results = request.getParameter("results");
//构造出记录数参数
results = "&results="+results;
//构造出完整的URL
String url = baseUrl+query+results;
//建立一个HttpURLConnection对象进行搜索
HttpURLConnection con = (HttpURLConnection)new URL(url).openConnection();
//设置HttpURLConnection对象的访问方法
con.setRequestMethod("GET");
//将查询的结果以XML文档返回给客户端
response.setContentType("text/xml");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
//建立一个BufferedReader对象读取查询结果
BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String line = null;
//一行一行地读取查询结果
while ((line = reader.readLine())!=null){
//对读取的数据进行编码转换
line = new String(line.getBytes(),"gb2312");
out.println(line);
}
out.flush();
out.close();
}在 out.println(line); 中输出的是一个 xml 文件:<?xml version="1.0" encoding="UTF-8"?>
<ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:yahoo:srch"
xsi:schemaLocation="urn:yahoo:srch http://api.search.yahoo.com/WebSearchService/V1/WebSearchResponse.xsd"
type="web" totalResultsAvailable="316000000" totalResultsReturned="10"
firstResultPosition="1"
moreSearch="/WebSearchService/V1/webSearch?query=%E6%96%B0%E6%B5%AA&appid=YahooDemo&region=us"> <Result>
<Title>新浪首页</Title>
<Summary>
新浪网为全球用户24小时提供全面及时的中文资讯,内容覆盖国内外突发新闻事件、体坛赛事、娱乐时尚、产业资讯、实用信息等,设有新闻、体育、娱乐、财经、科技
、房产、汽车等30多 ... 新浪09地产排行榜. 京东名盘 搜索引擎. 紫御府,新复式大宅. 山河海泉林石之宅.
故宫北岸中轴国际. 你看,80后都买房了. 北四环上, ...
</Summary>
<Url>http://www.sina.com.cn/</Url>
<ClickUrl>http://www.sina.com.cn/</ClickUrl>
<DisplayUrl>www.sina.com.cn/</DisplayUrl>
<ModificationDate>1241938800</ModificationDate>
<MimeType>text/html</MimeType>
<Cache>
<Url>
http://uk.wrs.yahoo.com/_ylt=A0PDB2IqQhZKCDMBdQDdmMwF;_ylu=X3oDMTBwOHA5a2tvBGNvbG8DdwRwb3MDMQRzZWMDc3IEdnRpZAM-/SIG=17cv93er5/EXP=1243059114/**http%3A//66.218.69.11/search/cache%3Fappid=YahooDemo%26ei=UTF-8%26type=all%26query=%25E6%2596%25B0%25E6%25B5%25AA%26results=10%26u=www.sina.com.cn/%26w=%25E6%2596%25B0%25E6%25B5%25AA%26d=WO48w0xISxu2%26icp=1%26.intl=us
</Url>
<Size>419296</Size>
</Cache>
</Result> <Result>
<Title>sohu-sina-163 on Flickr - Photo Sharing!</Title>
<Summary>
新浪 sina 搜狐 sohu 网易 163 alexa 数据 ... Explore Page Last 7 Days
Interesting Popular Tags Calendar Most Recent Uploads ...
World Map Places The Commons Creative ...
</Summary>
<Url>http://flickr.com/photos/11996695@N03/1249958138/</Url>
<ClickUrl>
http://flickr.com/photos/11996695@N03/1249958138/
</ClickUrl>
<DisplayUrl>
flickr.com/photos/11996695@N03/1249958138/
</DisplayUrl>
<ModificationDate>1240988400</ModificationDate>
<MimeType>text/html</MimeType>
<Cache>
<Url>
http://uk.wrs.yahoo.com/_ylt=A0PDB2IqQhZKCDMBigDdmMwF;_ylu=X3oDMTBwYTZ1aGtmBGNvbG8DdwRwb3MDOARzZWMDc3IEdnRpZAM-/SIG=186ip5sva/EXP=1243059114/**http%3A//66.218.69.11/search/cache%3Fappid=YahooDemo%26ei=UTF-8%26type=all%26query=%25E6%2596%25B0%25E6%25B5%25AA%26results=10%26u=flickr.com/photos/11996695@N03/1249958138/%26w=%25E6%2596%25B0%25E6%25B5%25AA%26d=FreSa0xISy6M%26icp=1%26.intl=us
</Url>
<Size>60026</Size>
</Cache>
</Result></ResultSet>
<!-- ws02.ydn.gq1.yahoo.com uncompressed Thu May 21 23:11:54 PDT 2009 -->
我希望循环得到:第一个:
Title:新浪首页
Summary:新浪网为全球用户24小时提供全面及时的中文资讯,内容覆盖国内外突发新闻事件、体坛赛事、娱乐时尚、产业资讯、实用信息等,设有新闻、体育、娱乐、财经、科技
Url:http://www.sina.com.cn
ModificationDate:1241938800
.
.
.
{
//定义Yahoo的搜索Web Service的访问URL的基本部分
String baseUrl = "http://api.search.yahoo.com/WebSearchService/V1/webSearch?appid=YahooDemo&ei=gb2312&type=all";
//获得客户的查询关键字
String query = request.getParameter("query");
//对query进编码转换
query = new String(query.getBytes("ISO8859-1"),"gb2312");
//对query进URL编码
query = URLEncoder.encode(query,"gb2312");
//构造出查询关键字参数
query = "&query="+query;
//获得客户的记录数
String results = request.getParameter("results");
//构造出记录数参数
results = "&results="+results;
//构造出完整的URL
String url = baseUrl+query+results;
//建立一个HttpURLConnection对象进行搜索
HttpURLConnection con = (HttpURLConnection)new URL(url).openConnection();
//设置HttpURLConnection对象的访问方法
con.setRequestMethod("GET");
//将查询的结果以XML文档返回给客户端
response.setContentType("text/xml");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
//建立一个BufferedReader对象读取查询结果
BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String line = null;
//一行一行地读取查询结果
while ((line = reader.readLine())!=null){
//对读取的数据进行编码转换
line = new String(line.getBytes(),"gb2312");
out.println(line);
}
out.flush();
out.close();
}在 out.println(line); 中输出的是一个 xml 文件:<?xml version="1.0" encoding="UTF-8"?>
<ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:yahoo:srch"
xsi:schemaLocation="urn:yahoo:srch http://api.search.yahoo.com/WebSearchService/V1/WebSearchResponse.xsd"
type="web" totalResultsAvailable="316000000" totalResultsReturned="10"
firstResultPosition="1"
moreSearch="/WebSearchService/V1/webSearch?query=%E6%96%B0%E6%B5%AA&appid=YahooDemo&region=us"> <Result>
<Title>新浪首页</Title>
<Summary>
新浪网为全球用户24小时提供全面及时的中文资讯,内容覆盖国内外突发新闻事件、体坛赛事、娱乐时尚、产业资讯、实用信息等,设有新闻、体育、娱乐、财经、科技
、房产、汽车等30多 ... 新浪09地产排行榜. 京东名盘 搜索引擎. 紫御府,新复式大宅. 山河海泉林石之宅.
故宫北岸中轴国际. 你看,80后都买房了. 北四环上, ...
</Summary>
<Url>http://www.sina.com.cn/</Url>
<ClickUrl>http://www.sina.com.cn/</ClickUrl>
<DisplayUrl>www.sina.com.cn/</DisplayUrl>
<ModificationDate>1241938800</ModificationDate>
<MimeType>text/html</MimeType>
<Cache>
<Url>
http://uk.wrs.yahoo.com/_ylt=A0PDB2IqQhZKCDMBdQDdmMwF;_ylu=X3oDMTBwOHA5a2tvBGNvbG8DdwRwb3MDMQRzZWMDc3IEdnRpZAM-/SIG=17cv93er5/EXP=1243059114/**http%3A//66.218.69.11/search/cache%3Fappid=YahooDemo%26ei=UTF-8%26type=all%26query=%25E6%2596%25B0%25E6%25B5%25AA%26results=10%26u=www.sina.com.cn/%26w=%25E6%2596%25B0%25E6%25B5%25AA%26d=WO48w0xISxu2%26icp=1%26.intl=us
</Url>
<Size>419296</Size>
</Cache>
</Result> <Result>
<Title>sohu-sina-163 on Flickr - Photo Sharing!</Title>
<Summary>
新浪 sina 搜狐 sohu 网易 163 alexa 数据 ... Explore Page Last 7 Days
Interesting Popular Tags Calendar Most Recent Uploads ...
World Map Places The Commons Creative ...
</Summary>
<Url>http://flickr.com/photos/11996695@N03/1249958138/</Url>
<ClickUrl>
http://flickr.com/photos/11996695@N03/1249958138/
</ClickUrl>
<DisplayUrl>
flickr.com/photos/11996695@N03/1249958138/
</DisplayUrl>
<ModificationDate>1240988400</ModificationDate>
<MimeType>text/html</MimeType>
<Cache>
<Url>
http://uk.wrs.yahoo.com/_ylt=A0PDB2IqQhZKCDMBigDdmMwF;_ylu=X3oDMTBwYTZ1aGtmBGNvbG8DdwRwb3MDOARzZWMDc3IEdnRpZAM-/SIG=186ip5sva/EXP=1243059114/**http%3A//66.218.69.11/search/cache%3Fappid=YahooDemo%26ei=UTF-8%26type=all%26query=%25E6%2596%25B0%25E6%25B5%25AA%26results=10%26u=flickr.com/photos/11996695@N03/1249958138/%26w=%25E6%2596%25B0%25E6%25B5%25AA%26d=FreSa0xISy6M%26icp=1%26.intl=us
</Url>
<Size>60026</Size>
</Cache>
</Result></ResultSet>
<!-- ws02.ydn.gq1.yahoo.com uncompressed Thu May 21 23:11:54 PDT 2009 -->
我希望循环得到:第一个:
Title:新浪首页
Summary:新浪网为全球用户24小时提供全面及时的中文资讯,内容覆盖国内外突发新闻事件、体坛赛事、娱乐时尚、产业资讯、实用信息等,设有新闻、体育、娱乐、财经、科技
Url:http://www.sina.com.cn
ModificationDate:1241938800
.
.
.
解决方案 »
- struts2 load事件问题
- 在WML中,如何让INPUT标签显示默认值 急急急!!!!
- struts2怎么把值传给JavaScript代码?
- session的作用范围?
- spring3.1 hibernate 4.2 事务配置未能起作用。求帮忙看看,谢谢
- 再次请问各位大虾,这个是什么原因????
- 怎样取得ResultSet的recordcount?
- 在线的救急:stmt.executeUpdate()在while(rs.next())中无法循环!!
- 请提供优秀和进步快的JSP书
- 各位老师,请问如何将resin2.1.4的目录浏览去掉!
- 请教使用aptana的高手帮下忙~~~~~
- 通过yahoo api搜索,如何将得到的xml一行一行打印出来?
对,我用
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance ( ) ;
try {
DocumentBuilder db = dbf.newDocumentBuilder ( ) ;可..
import java.io.File;
import java.util.List;import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public class Test3 {
public static void main(String[] args) {
SAXReader reader = new SAXReader();
Document document;
File file = new File("d:/result.xml");
try {
document = reader.read(file);
Element root = document.getRootElement();
List<Element> list = root.elements("Result");
for (int i = 0; i < list.size(); i++) {
Element result = list.get(i);
List<Element> property = result.elements();
for (int j = 0; j < property.size(); j++) {
Element e = property.get(j);
String content = result.elementText(e.getQName().getName());
System.out.println(e.getQName().getName() + ":"
+ content
+ "\t");
}
System.out.println("-------------------------------------------");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
<?xml version="1.0" encoding="GB2312"?>
<RESULT>
<VALUE>
<NO>A1234 </NO>
<ADDR>四川省XX县XX镇XX路X段XX号 </ADDR>
</VALUE>
<VALUE>
<NO>B1234 </NO>
<ADDR>四川省XX市XX乡XX村XX组 </ADDR>
</VALUE>
</RESULT>
第一种 DOM 实现方法
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class MyXMLReader2DOM {
public static void main(String arge[]) {
long lasting = System.currentTimeMillis(); try {
File f = new File("data_10k.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(f);
NodeList nl = doc.getElementsByTagName("VALUE");
for (int i = 0; i < nl.getLength(); i++) {
System.out.print("车牌号码:"+ doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());
System.out.println("车主地址:"+ doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
第二种,DOM4J实现方法
import java.io.*;
import java.util.*;
import org.dom4j.*;
import org.dom4j.io.*;
public class MyXMLReader2DOM4J {
public static void main(String arge[]) {
long lasting = System.currentTimeMillis();
try {
File f = new File("data_10k.xml");
SAXReader reader = new SAXReader();
Document doc = reader.read(f);
Element root = doc.getRootElement();
Element foo;
for (Iterator i = root.elementIterator("VALUE"); i.hasNext();) {
foo = (Element) i.next();
System.out.print("车牌号码:" + foo.elementText("NO"));
System.out.println("车主地址:" + foo.elementText("ADDR"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
第三种 JDOM实现方法
import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.*;
public class MyXMLReader2JDOM {
public static void main(String arge[]) {
long lasting = System.currentTimeMillis();
try {
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new File("data_10k.xml"));
Element foo = doc.getRootElement();
List allChildren = foo.getChildren();
for (int i = 0; i < allChildren.size(); i++) {
System.out.print("车牌号码:"+ ((Element) allChildren.get(i)).getChild("NO").getText());
System.out.println("车主地址:"+ ((Element) allChildren.get(i)).getChild("ADDR").getText());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
第四种SAX实现方法
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class MyXMLReader2SAX extends DefaultHandler {
java.util.Stack tags = new java.util.Stack();
public MyXMLReader2SAX() {
super();
}
public static void main(String args[]) {
long lasting = System.currentTimeMillis();
try {
SAXParserFactory sf = SAXParserFactory.newInstance();
SAXParser sp = sf.newSAXParser();
MyXMLReader2SAX reader = new MyXMLReader2SAX();
sp.parse(new InputSource("data_10k.xml"), reader);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("运行时间:" + (System.currentTimeMillis() - lasting)
+ "毫秒");
}
public void characters(char ch[], int start, int length)
throws SAXException {
String tag = (String) tags.peek();
if (tag.equals("NO")) {
System.out.print("车牌号码:" + new String(ch, start, length));
}
if (tag.equals("ADDR")) {
System.out.println("地址:" + new String(ch, start, length));
}
}
public void startElement(String uri, String localName, String qName,
Attributes attrs) {
tags.push(qName);
}
}
第四种SAX实现方法
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class MyXMLReader2SAX extends DefaultHandler {
java.util.Stack tags = new java.util.Stack();
public MyXMLReader2SAX() {
super();
}
public static void main(String args[]) {
long lasting = System.currentTimeMillis();
try {
SAXParserFactory sf = SAXParserFactory.newInstance();
SAXParser sp = sf.newSAXParser();
MyXMLReader2SAX reader = new MyXMLReader2SAX();
sp.parse(new InputSource("data_10k.xml"), reader);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("运行时间:" + (System.currentTimeMillis() - lasting)
+ "毫秒");
}
public void characters(char ch[], int start, int length)
throws SAXException {
String tag = (String) tags.peek();
if (tag.equals("NO")) {
System.out.print("车牌号码:" + new String(ch, start, length));
}
if (tag.equals("ADDR")) {
System.out.println("地址:" + new String(ch, start, length));
}
}
public void startElement(String uri, String localName, String qName,
Attributes attrs) {
tags.push(qName);
}
}
因java解析xml方法:DOM解析、SAX解析、JDOM解析、DOM4J解析
这四种xml解析都是真针对xml文件对象
就是不在返回的时候立刻解析,先生成xml文件,然后再去读这个文件?这样不错!