是否有可能通過html標籤中的div標籤的id屬性過濾tika解析的內容?Tika - 有可能獲得div標籤的id屬性嗎?
我想過濾出ID爲「標題」的div,因爲我解析的所有頁面都有相同的標題,我只需要唯一的數據。
我已經觸發則ContentHandler.startElement爲div標籤:
class MyHtmlMapper extends DefaultHtmlMapper {
public String mapSafeElement(String name) {
if ("DIV".equals(name)) {
return "div";
}
return super.mapSafeElement(name);
}
}
我創建具有以下解析器:
InputStream urlInput = new URL(url).openStream();
Parser parser = new AutoDetectParser();
Metadata metadata = new Metadata();
ContentHandler handler = new BodyContentHandler();
ParseContext context = new ParseContext();
context.set(HtmlMapper.class, new MyHtmlMapper());
所以我假設我必須覆蓋BodyContentHandler數據處理程序中的.startElement()和BodyContentHandler.endElement()方法(如下所示):
class MyContnentHandler extends BodyContentHandler{
public void startElement(String uri, String name, String element, Attributes atri) {
...
super.startElement(...)
}
public void endElement(...)
... //Similar to above
}
}
我一直在爲此工作一段時間,我對tika並不熟悉。如果有人有任何建議或解決方案,他們會非常感謝!
後來我才知道,我可以通過在MyHtmlMapper類中重寫mapSafeAttribute方法如下使的startElement屬性(即id和class)顯示:
class MyHtmlMapper extends DefaultHtmlMapper {
public String mapSafeElement(String name) {
if ("DIV".equals(name)) {
return "div";
}
return super.mapSafeElement(name);
}
public String mapSafeAttribute(String eleName, String attrName) {
HashSet<String> safeAttrs = new HashSet<String>();
safeAttrs.add("id");
safeAttrs.add("class");
if (safeAttrs.contains(attrName) && eleName.equals("div")) {
return attrName;
} else {
return super.mapSafeAttribute(eleName, attrName);
}
}
}
但我仍然無法弄清楚如何停止解析器解析具有給定屬性屬性的開始和結束標記之間的內容。
讓我知道是否遺漏了任何有用的信息。
你並不需要在您的文章署名 - 您的用戶卡被自動添加。閱讀[常見問題](http://stackoverflow.com/faq#signatures)瞭解更多詳情。 – Artemix 2012-11-28 11:52:19