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