2014-06-20 6 views
0

주어진 URL에서 다운로드 한 데이터에서 XML 및 HTML 입력을받는 문자열이 있습니다. SAXParser를 통해 구문 분석하기 전에 다운로드 한 문자열이 html 문서의 RSS 피드인지 확인하고 싶습니다. 이것을 찾는 방법? 내가 http://rss.cnn.com/rss/edition.rss에서 데이터를 다운로드하면 내가 http://edition.cnn.com/2014/06/19/opinion/iraq-neocons-wearing/index.html에서 데이터를 다운로드하는 경우 예를주어진 문자열을 찾는 방법은 RSS 피드입니까?

를 들어

는 결과 문자열은 결과 문자열이 HTML 문서 인 RSS 피드

입니다.

문자열 만 rss 피드 인 경우 프로세스를 계속 진행하고 싶습니다.

답변

1

RSS와 HTML은 모두 XML의 하위 집합입니다. 따라서 XML로 데이터를 가져 와서 RSS XSD에 대해 유효성을 검사 할 수 있습니다. 이렇게

URL schemaFile = new URL("http://europa.eu/rapid/conf/RSS20.xsd"); 
Source xmlFile = new StreamSource(YOUR_URL_HERE); 
SchemaFactory schemaFactory = SchemaFactory 
    .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
Schema schema = schemaFactory.newSchema(schemaFile); 
Validator validator = schema.newValidator(); 
try { 
    validator.validate(xmlFile); 
    // at this line you can be sure it's RSS 2.0 stream 
} catch (SAXException e) { 
    // NOT RSS 
} 

문자열을 확인하려면 루트 요소, 필수 요소와 같은 일반적인 rss 구조를 확인할 수 있습니다. 그러나 나는 그것을 추천하지 않을 것이다.

+0

유효성 검사를하지 않고도이 작업을 수행하는 간단한 방법이 있습니다. 일부 피드의 크기가 커질 수 있으며 예외를 발생시키는 XML의 잘못된 문자가있을 수 있습니다. 따라서 오류가있는 RSS 피드이거나 HTML 파일 인 경우 차별화 할 수 없습니다. – Achaius

+0

가장 정확한 방법이라고 생각합니다. 코드 밑에서 해법을 시도해 볼 수는 있지만, 모든 것이 잘못 될 때를 생각할 수 있습니다. 링크의 확장자를 확인할 수도 있습니다 : 일반적으로 RSS의 경우 ".rss"입니다. :) – mkrakhin