Java 读取和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" />

我正在使用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#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&amp;max-results=25" />
   <link rel="next" type="application/atom+xml" href="http://gdata.youtube.com/feeds/api/videos/EokUNzGJBI8/comments?start-index=26&amp;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();
 }