无法使用 SAX 从 URL 解析 XML 文件?
Cannot parse XML file from URL using SAX?
我从 URL 中读取了一个 XML 文件,然后将其传递给 SAX 文档。然而,这几乎就像没有发生解析一样,我不知道为什么?
XMLReader myReader = XMLReaderFactory.createXMLReader();
LetterHandler rh = new LetterHandler();
myReader.setContentHandler(rh);
URL url2 = new URL("http://www.w3schools.com/xml/note.xml");
InputStream stream = url2.openStream();
System.out.println(stream.available());
myReader.parse(new InputSource(stream));
class LetterHandler extends DefaultHandler {
Boolean toSeen = false;
String to;
public void startElement(String localName, String rawName, Attributes attributes) throws SAXException {
if (rawName.equals("to")) {
System.out.println(rawName);
toSeen = true;
}
}
public void characters(char[] ch, int start, int length) {
if (toSeen) {
System.out.println("To: " + new String(ch, start, length));
toSeen = false;
}
}
}
据我所知,调用 .parse() 方法后,应该打印出 <to></to>
标签的内容,但事实并非如此。知道这里出了什么问题吗?
您对 startElement
方法的重写具有错误的签名,因此它不会重写任何内容,而是调用默认方法。
Java 具有 @Override
注释,您在覆盖超类方法时使用它,允许编译器验证您是否具有(或至少 a) 正确的签名。
正确的签名是:
public void startElement(
String uri,
String rawName,
String qname,
Attributes attributes) throws SAXException {
...
我从 URL 中读取了一个 XML 文件,然后将其传递给 SAX 文档。然而,这几乎就像没有发生解析一样,我不知道为什么?
XMLReader myReader = XMLReaderFactory.createXMLReader();
LetterHandler rh = new LetterHandler();
myReader.setContentHandler(rh);
URL url2 = new URL("http://www.w3schools.com/xml/note.xml");
InputStream stream = url2.openStream();
System.out.println(stream.available());
myReader.parse(new InputSource(stream));
class LetterHandler extends DefaultHandler {
Boolean toSeen = false;
String to;
public void startElement(String localName, String rawName, Attributes attributes) throws SAXException {
if (rawName.equals("to")) {
System.out.println(rawName);
toSeen = true;
}
}
public void characters(char[] ch, int start, int length) {
if (toSeen) {
System.out.println("To: " + new String(ch, start, length));
toSeen = false;
}
}
}
据我所知,调用 .parse() 方法后,应该打印出 <to></to>
标签的内容,但事实并非如此。知道这里出了什么问题吗?
您对 startElement
方法的重写具有错误的签名,因此它不会重写任何内容,而是调用默认方法。
Java 具有 @Override
注释,您在覆盖超类方法时使用它,允许编译器验证您是否具有(或至少 a) 正确的签名。
正确的签名是:
public void startElement(
String uri,
String rawName,
String qname,
Attributes attributes) throws SAXException {
...