[英]How do I parse my simple XML file with Java and SAX?
I am trying to parse the file below.我正在尝试解析下面的文件。 I want to print the id and name of each passenger.
我想打印每个乘客的 ID 和姓名。 Can you give me code to parse it ?
你能给我代码来解析它吗?
<?xml version="1.0" encoding="utf-8"?>
<root xmlns:android="www.google.com">
<passenger id = "001">
<name>Tom Cruise</name>
</passenger>
<passenger id = "002">
<name>Tom Hanks</name>
</passenger>
</root>
UPDATE This is what i had tried.更新这是我试过的。 Code, problems etc mentioned here - Error in output of a simple SAX parser
此处提到的代码、问题等 - 简单 SAX 解析器的输出错误
Here is a working example to start with, though I suggest you to use StAX instead, you will see that SAX is not very convenient下面是一个工作示例,虽然我建议您改用 StAX,但您会发现 SAX 不是很方便
import java.io.File;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SAX2 {
public static void main(String[] args) throws Exception {
SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
parser.parse(new File("test.xml"), new DefaultHandler() {
@Override
public void startElement(String uri, String localName,
String qName, Attributes atts) throws SAXException {
if (qName.equals("passenger")) {
System.out.println("id = " + atts.getValue(0));
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
String text = new String(ch, start, length);
if (!text.trim().isEmpty()) {
System.out.println("name " + text);
}
}
});
}
}
output输出
id = 001
name Tom Cruise
id = 002
name Tom Hanks
DocumentBuilderFactory
.DocumentBuilderFactory
。DocumentBuilder
from the factory.DocumentBuilder
。parse()
methods of the builder to create a Document
.parse()
方法之一创建Document
。Document
, you can get the passenger Element
s with Document
's getElementsByTagName()
method.Document
,您可以使用Document
的getElementsByTagName()
方法获取乘客Element
。 I'm sure you'll be able to work out the rest.我相信你能解决剩下的问题。
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
InputStream xmlInput = new FileInputStream("theFile.xml");
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new SaxHandler();
saxParser.parse(xmlInput, handler);
} catch (Throwable err) {
err.printStackTrace ();
}
String str = "<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
"<root xmlns:android=\"www.google.com\">" +
"<passenger id = \"001\">" +
"<name>Tom Cruise</name>" +
"</passenger>" +
"<passenger id = \"002\">" +
"<name>Tom Hanks</name>" +
"</passenger>" +
"</root>";
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(str));
final Document document = db.parse(is);
System.out.println("node Name " + document.getChildNodes().item(0).getChildNodes().item(1).getNodeName());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.