Java 如何使用Jericho HTML解析器解析XML

Java 如何使用Jericho HTML解析器解析XML,java,xml,servlets,jericho-html-parser,Java,Xml,Servlets,Jericho Html Parser,我不熟悉java和servlet,目前正在尝试使用Jericho XML解析器解析XML。 例如,我想从每个link标签中获取链接,但它不显示任何内容,total number表示27(只能获取不带字符串的正确总数)。 任何知道怎么做的人,请教我 import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation

我不熟悉java和servlet,目前正在尝试使用Jericho XML解析器解析XML。 例如,我想从每个link标签中获取链接,但它不显示任何内容,total number表示27(只能获取不带字符串的正确总数)。 任何知道怎么做的人,请教我

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


}
import java.io.IOException;
导入java.io.PrintWriter;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入java.net.MalformedURLException;
导入java.net.URL;
导入java.util.*;
导入net.htmlparser.jericho.Element;
导入net.htmlparser.jericho.Source;
@WebServlet(urlPatterns={“/HelloServlet”})
公共类HelloServlet扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
@凌驾
受保护的void doGet(HttpServletRequest-req、HttpServletResponse-resp)抛出ServletException、IOException、MalformedURLException{
相应的setContentType(“text/html;charset=UTF-8”);
PrintWriter out=resp.getWriter();
out.println(“”);
out.println(“”);
out.println(“”);
Source Source=新源(新URL(“http://news.yahoo.com/rss/"));
source.fullSequentialParse();
List Linklist=source.getAllegements(“链接”);
if(Linklist!=null){
out.println(“total:+Linklist.size()+”

”; 用于(元素链接:链接列表){ out.println(“”+link.getContent().toString()+”

”; } } out.println(“”); out.println(“”); } }
根据主页,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;
}
import java.io.IOException;
导入java.net.URL;
导入java.util.LinkedList;
导入java.util.List;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.parsers.parserConfiguration异常;
导入org.w3c.dom.Document;
导入org.w3c.dom.Element;
导入org.w3c.dom.NodeList;
导入org.xml.sax.SAXException;
// ...
私有列表getRssLinks()引发ParserConfiguration异常,
SAXException,IOException
{
最终列表rssLinks=新链接列表();
最终URL=新URL(“http://news.yahoo.com/rss/");
最终文档doc=DocumentBuilderFactory.newInstance().newDocumentBuilder()
.parse(url.openStream());
最终节点列表linkNodes=doc.getElementsByTagName(“链接”);
对于(int i=0;i
欢迎来到SO。请阅读。您还没有提供足够的详细信息,例如Yahoo RSS提要的内容示例、程序的输出以及您希望看到的内容。请编辑您的问题以包含此信息。感谢您的评论,vanje。但是在这些内容之前要导入什么类?我尝试使用google查找,但无法。很抱歉,我对Java非常陌生。添加了导入语句。标准Java类都有很好的文档记录,例如,对于Java 6,像Eclipse这样复杂的IDE可以帮助您为类找到正确的包(在Eclipse上下文菜单中:Source/Organize Imports或将光标放在未知类的一行中,然后按Ctrl-1)。我可以打开链接I web。但是,当我通过JAVA应用程序访问它时。您提供的url出现错误(线程“main”java.net.ConnectException:Connection timed out:connect中出现异常)您是否在公司防火墙后面?然后您应该使用代理设置调用Java。