如何使用Java和SAX解析我的简单XML文件?

我试图解析下面的文件。 我想打印每位乘客的身份和姓名。 你能给我解析它的代码吗?

   Tom Cruise   Tom Hanks   

更新这是我尝试过的。 这里提到的代码,问题等 – 简单SAX解析器的输出出错

这是一个开始的工作示例,虽然我建议您使用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); } } }); } } 

产量

 id = 001 name Tom Cruise id = 002 name Tom Hanks 
  1. 创建一个DocumentBuilderFactory
  2. 从工厂获取DocumentBuilder
  3. 使用构建器的parse()方法之一来创建Document
  4. 获得Document ,您可以使用DocumentgetElementsByTagName()方法获取乘客Element

我相信你能够解决剩下的问题。

 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 = " " + "" + "" + "Tom Cruise" + "" + "" + "Tom Hanks" + "" + ""; 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());