我制定了以下解决方案:
在 XHTML-Source-Code 上使用 xpath-query(我采用了打印版本,因为它更短,但它也适用于普通版本)。
//html/body//div[@id='bodyContent']/p[1]
这适用于德语和英语维基百科,我还没有找到不输出第一段的文章。解决方案也很快,我也想过只取 xhtml 的前 x 个字符,但这会使 xhtml 无效。
如果有人在这里搜索 JAVA 代码,那么它是:
private static DocumentBuilderFactory dbf;
static {
dbf = DocumentBuilderFactory.newInstance();
dbf.setAttribute("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
}
private static XPathFactory xpathf = XPathFactory.newInstance();
private static String xexpr = "//html/body//div[@id='bodyContent']/p[1]";
private static String getPlainSummary(String url) {
try {
// OPen Wikipage
URL u = new URL(url);
URLConnection uc = u.openConnection();
uc.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1) Gecko/20090616 Firefox/3.5");
InputStream uio = uc.getInputStream();
InputSource src = new InputSource(uio);
//Construct Builder
DocumentBuilder builder = dbf.newDocumentBuilder();
Document docXML = builder.parse(src);
//Apply XPath
XPath xpath = xpathf.newXPath();
XPathExpression xpathe = xpath.compile(xexpr);
String s = xpathe.evaluate(docXML);
//Return Attribute
if (s.length() == 0) {
return null;
} else {
return s;
}
}
catch (IOException ioe) {
logger.error("Cant get XML", ioe);
return null;
}
catch (ParserConfigurationException pce) {
logger.error("Cant get DocumentBuilder", pce);
return null;
}
catch (SAXException se) {
logger.error("Cant parse XML", se);
return null;
}
catch (XPathExpressionException xpee) {
logger.error("Cant parse XPATH", xpee);
return null;
}
}
通过调用使用它getPlainSummary("http://de.wikipedia.org/wiki/Uma_Thurman");