Java 读取和xml文件中xml文件的链接并保持解析
我正在使用sax解析器解析xml文件。xml文件包含指向具有下一个属性的链接标记中另一个xml文件的链接。我必须一直读到最后一个没有next属性的xml文件。 以下是xml文件:Java 读取和xml文件中xml文件的链接并保持解析,java,xml,xml-parsing,youtube,sax,Java,Xml,Xml Parsing,Youtube,Sax,我正在使用sax解析器解析xml文件。xml文件包含指向具有下一个属性的链接标记中另一个xml文件的链接。我必须一直读到最后一个没有next属性的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#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" />
要递归读取上面在l
中返回的url,请执行以下操作:
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中找不到下一个后,上面的内容会继续打印最后一个响应。编辑::嗯,对不起,我终于收到了您的代码 实际上,您并没有真正执行递归调用,因为您正在第二个循环(while)中调用parse,这是一个更好的主意 因此,您应该创建DefaultHandler的子类,并将“nextUrl”作为该类的一个属性。因此,代码是:
public class MyHandler extends DefaultHandler {
private String nextUrl;
public void startElement(String uri, String localName,String qName,
Attributes attributes) throws SAXException {
// (...)
if(qName.equalsIgnoreCase("Link") && attributes.getValue("rel").equalsIgnoreCase("next")){
nextUrl=attributes.getValue("href");
}
}
public String getNextUrl() { return nextUrl; }
}
然后在您的呼叫代码中:
String url = "*firstUrl*"; //ur=initial xml link
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
MyHandler handler = new DefaultHandler()
while(url != null){
saxParser.parse(new InputSource(url.openStream()), handler);
// Here, you'll certainly want to do something with the data loaded in handler...
url = handler.getNextUrl();
}
这意味着我可以在调用reset?@orabog时循环这个saxParser2,基本上我要做的就是读取带有rel=“next”的href in link标记,并解析它,直到最后一个没有rel=“next”attrib的xml文件。
String url = "*firstUrl*"; //ur=initial xml link
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
MyHandler handler = new DefaultHandler()
while(url != null){
saxParser.parse(new InputSource(url.openStream()), handler);
// Here, you'll certainly want to do something with the data loaded in handler...
url = handler.getNextUrl();
}