如何使用杰里科HTML解析器解析XML

问题描述:

我是新来的java和servlet,目前正在尝试使用杰里科XML解析器解析XML。 例如,我想从每个链接标签中获取链接,但它不会显示任何内容,并且总数为27(只能得到正确的没有字符串的总数)。 任何人都知道如何,请教我。如何使用杰里科HTML解析器解析XML

import java.io.IOException; 
import java.io.PrintWriter; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.*; 

import net.htmlparser.jericho.Element; 
import net.htmlparser.jericho.Source; 

@WebServlet(urlPatterns = { "/HelloServlet"}) 

public class HelloServlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 

@Override 
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException,MalformedURLException{ 

    resp.setContentType("text/html; charset=UTF-8"); 
    PrintWriter out = resp.getWriter(); 
    out.println("<html>"); 
    out.println("<head><meta http-equiv='content-type' content='text/html; charset=UTF-8'></head>"); 
    out.println("<body>"); 
    Source source = new Source(new URL("http://news.yahoo.com/rss/")); 
    source.fullSequentialParse(); 


    List<Element> Linklist = source.getAllElements("link"); 


    if(Linklist!=null){ 
     out.println("<p>total:"+Linklist.size()+"</p>"); 
     for(Element link: Linklist){ 
      out.println("<p>"+link.getContent().toString()+"</p>"); 
     } 
    } 


    out.println("</body>"); 
    out.println("</html>"); 
} 


} 
+0

欢迎来到SO。请阅读[如何问](http://*.com/questions/how-to-ask)。你还没有真正提供足够的细节,例如雅虎RSS内容的样本,程序的输出以及你期望看到的内容。请修改您的问题以包含此信息。 –

+0

ok.t​​hanks您的建议! – Tetsu

根据Jericho HTML Parser的主页,Jericho用于处理HTML文档。但是来自雅虎的RSS是XML,您可以使用Java的标准XML来解析此文档并提取链接标签。 这里是一个例子:

import java.io.IOException; 
import java.net.URL; 
import java.util.LinkedList; 
import java.util.List; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.NodeList; 
import org.xml.sax.SAXException; 

// ... 

private List<String> getRssLinks() throws ParserConfigurationException, 
    SAXException, IOException 
{ 
    final List<String> rssLinks = new LinkedList<String>(); 
    final URL url = new URL("http://news.yahoo.com/rss/"); 
    final Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder() 
         .parse(url.openStream()); 
    final NodeList linkNodes = doc.getElementsByTagName("link"); 
    for(int i = 0; i < linkNodes.getLength(); i++) { 
    final Element linkElement = (Element) linkNodes.item(i); 
    rssLinks.add(linkElement.getTextContent()); 
    } 

    return rssLinks; 
} 
+0

感谢评论,vanje.but这些东西之前导入的类是什么?我试图找到谷歌,但couldn't.sorry我很新的Java。 – Tetsu

+0

添加了导入语句。标准的Java类有很好的文档记录,例如对于Java 6 http://docs.oracle.com/javase/6/docs/api/像Eclipse这样的复杂IDE可以帮助您找到适合类的包(在Eclipse上下文菜单中:Source/Organize Imports或将游标定位在一个未知类的行中并按下Ctrl-1)。 – vanje

+0

非常感谢! :d – Tetsu