4

アプリケーションで XML を文字列として解析するために sax パーサーを使用しています。コードが HTML 本文を文字列として送信すると、sax パーサーが長時間 (5 時間以上) スタックします。

ページのソース URL : " http://www.cityam.com/taxonomy/term/1/all/feed " を解析します。XML の代わりに HTML ページを提供するこの URL。この種の問題を処理する方法、または適切な例外を使用して saxParser から抜け出す方法。私のコードはここにあります

public List<RssEntry> parseDocument(String body) {
    // expected body is xml but getting stuck when get body of html page.
    SAXParserFactory factory = SAXParserFactory.newInstance();
    try {
        SAXParser parser = factory.newSAXParser();
        XMLReader reader = parser.getXMLReader();   
        parser.parse(new ByteArrayInputStream(body.getBytes("UTF-8")), this);
    }

    some catch block

助けてください。ありがとう

4

2 に答える 2

0
// expected body is xml but getting stuck when get body of html page.
SAXParserFactory factory = SAXParserFactory.newInstance();
if(!body.startsWith("<?xml")){
    throw new NotXmlInputException(message); //your exception
}

または、xml の shema ファイルを作成し、検証を使用します

SchemaFactory constraintFactory =
        SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Source constraints = new StreamSource(/* your schema */);
Schema schema = constraintFactory.newSchema(constraints);
Validator validator = schema.newValidator();

try {
    validator.validate(/* convert your string to sourse*/);
} catch (org.xml.sax.SAXException e) {
    log("Validation error: " + e.getMessage());
}

または使用を助けるかもしれません

SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
于 2013-03-08T11:49:08.310 に答える