Nội dung đánh hơi là một phương pháp. Nhưng lưu ý rằng nguyên tử sử dụng các không gian tên và bạn đang tạo một trình phân tích cú pháp nhận thức không gian tên.
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");
}
Cũng lưu ý rằng bạn không thể so sánh bằng equalsIgnorCase(), vì tên phần tử XML phân biệt chữ hoa chữ thường.
Phương pháp khác là phản ứng trên tiêu đề Kiểu nội dung, nếu nó có sẵn trong yêu cầu HTTP GET. Loại nội dung cho ATOM sẽ là application/atom+xml
và cho RSS application/rss+xml
. Mặc dù vậy, tôi có thể nghi ngờ rằng không phải tất cả nguồn cấp dữ liệu RSS đều có thể tin cậy để thiết lập tiêu đề này một cách chính xác.
Tùy chọn thứ ba là xem hậu tố URL, ví dụ: .atom và .rss.
Hai phương pháp cuối cùng có thể dễ dàng cấu hình nếu bạn đang sử dụng Spring hay JAX-RS
Nguồn
2011-10-02 18:50:05
Tôi muốn cách tiếp cận của bạn trong một thế giới hoàn hảo. :) Theo kinh nghiệm của tôi, bạn sẽ phải đối phó với một loạt các nguồn cấp dữ liệu tự nhiên bỏ qua các tiêu chuẩn như Kiểu nội dung, hậu tố hoặc trường hợp của các phần tử XML. Đó là lý do tại sao tôi đề nghị một equalsIgnoreCase() - kiểm tra của phần tử gốc, vì đó là hầu như luôn luôn chính xác. – Chris
@Chris. Tôi cung cấp cho bạn rằng thế giới là không hoàn hảo và kinh doanh thức ăn là hỗn loạn. Chỉ cần nhìn vào mã nguồn [ROME] (http://java.net/projects/rome/). Nhưng, ít nhất hãy sử dụng một không gian tên nhận biết trình phân tích cú pháp XML, xin vui lòng! –
Tôi nghĩ rằng tôi có thể sử dụng cả hai phương pháp, một kiểm tra cho RSS, một cho Atom. –