Mah*_*sam 5 java xml rss atom-feed
我正在尝试确定给定的Feed是基于Atom还是基于RSS.
这是我的代码:
public boolean isRSS(String URL) throws ParserConfigurationException, SAXException, IOException{
DocumentBuilder builder = DocumentBuilderFactory.newInstance()
.newDocumentBuilder();
Document doc = builder
.parse(URL);
return doc.getDocumentElement().getNodeName().equalsIgnoreCase() == "rss";
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?如果我使用SAX Parser会更好吗?
嗅探内容是一种方法。但请注意,atom 使用命名空间,并且您正在创建一个非命名空间感知的解析器。
public boolean isAtom(String URL) throws ParserConfigurationException, SAXException, IOException{
DocumentBuilderFactory f = DocumentBuilderFActory.newInstance();
f.setNamespaceAware(true);
DocumentBuilder builder = f.newInstance().newDocumentBuilder();
Document doc = builder.parse(URL);
Element e = doc.getDocumentElement();
return e.getLocalName().equals("feed") &&
e.getNamespaceURI().equals("http://www.w3.org/2005/Atom");
}
Run Code Online (Sandbox Code Playgroud)
另请注意,不能使用 equalsIgnorCase() 进行比较,因为 XML 元素名称区分大小写。
另一种方法是对 Content-Type 标头做出反应(如果它在 HTTP GET 请求中可用)。ATOM 的 Content-Type 为application/atom+xmlRSS application/rss+xml。但我怀疑并非所有 RSS 提要都可以信任正确设置此标头。
第三个选项是查看 URL 后缀,例如 .atom 和 .rss。
如果您使用 Spring 或 JAX-RS,最后两种方法很容易配置
| 归档时间: |
|
| 查看次数: |
2659 次 |
| 最近记录: |