InputStream
- это то, из чего вы можете читать данные. Я мог бы также назвать это источником данных, но я бы не назвал это конвейером. Для меня трубопровод включает в себя несколько частей, которые склеены вместе.
Относительно вашей ошибки синтаксического анализатора: перед подачей данных непосредственно в анализатор, вы должны записать их в файл или System.out
, просто чтобы убедиться, что некоторые данные действительно поступили.
Затем вы должны передать эти данные парсеру, чтобы увидеть, что происходит, когда вы передаете ему известные данные.
И если эти два случая работают правильно, вы можете напрямую подавать данные.
[Обновление 2011-03-12]
Вот полный пример, который работает для меня. Может быть, вы можете заметить разницу в вашем коде (из которого вы разместили только части, особенно не часть, которая создает InputStream
):
package so5281746;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;
public class ParseXml {
public static void parseStream(InputStream input) {
try {
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
xmlReader.setContentHandler(new XmlParser());
xmlReader.parse(new InputSource(input));
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
URLConnection conn = new URL("http://repo1.maven.org/maven2/org/apache/ant/ant/maven-metadata.xml").openConnection();
InputStream input = conn.getInputStream();
parseStream(input);
}
static class XmlParser extends DefaultHandler {
@Override
public void startDocument() throws SAXException {
System.out.println("startDocument");
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println("startElement " + localName);
}
@Override
public void endDocument() throws SAXException {
System.out.println("endDocument");
}
}
}