如何使用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
- 创建一个
DocumentBuilderFactory
。 - 从工厂获取
DocumentBuilder
。 - 使用构建器的
parse()
方法之一来创建Document
。 - 获得
Document
,您可以使用Document
的getElementsByTagName()
方法获取乘客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());