sax パーサーを使用して xml ファイルを解析しています。xml ファイルには、次の属性を持つ link タグに別の xml ファイルへのリンクが含まれています。次の属性を持たない最後のxmlファイルまで読み続けなければなりません。xml ファイルは次のとおりです。
<link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://gdata.youtube.com/feeds/api/videos/EokUNzGJBI8/comments" />
<link rel="http://schemas.google.com/g/2005#batch" type="application/atom+xml" href="http://gdata.youtube.com/feeds/api/videos/EokUNzGJBI8/comments/batch" />
<link rel="self" type="application/atom+xml" href="http://gdata.youtube.com/feeds/api/videos/EokUNzGJBI8/comments?start-index=1&max-results=25" />
<link rel="next" type="application/atom+xml" href="http://gdata.youtube.com/feeds/api/videos/EokUNzGJBI8/comments?start-index=26&max-results=25" />
私は次のことを試しました:
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
boolean content=false;
int i=0;
public void startElement(String uri, String localName,String qName,
Attributes attributes) throws SAXException {
if (qName.equalsIgnoreCase("Content")) {
content = true;
i+=1;
}
if(qName.equalsIgnoreCase("Link") && attributes.getValue("rel").equalsIgnoreCase("next")){
l=attributes.getValue("href");
u=true;
}
}
上記で返された URL を再帰的に読み取るには、次のようにl
します。
saxParser2.parse(new InputSource(ur.openStream()), handler);//to read original url
while(l!=null)
{
urs=new URL(l); //successive urls
saxParser.parse(new InputSource(urs.openStream()), handler);
}
上記は、最後のxmlで次が見つからない後、最後の応答を出力し続けます。