0

I'm new to java and servlet and currently trying to parse XML using Jericho XML Parser. For instance, i want to get links from each link tag, but it dose not show anything,and total number says 27(can get only correct total number without string). Anyone who knows how to, please teach me.

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>");
}


}
4

1 回答 1

1

根据Jericho HTML Parser主页,Jericho 用于处理 HTML 文档。但是来自 Yahoo 的 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;
}
于 2011-11-21T17:28:09.657 回答