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

如何使用Java和SAX解析简单的XML文件?,java,xml,xml-parsing,Java,Xml,Xml Parsing,我正在尝试解析下面的文件。我想打印每位乘客的身份证和姓名。你能给我代码来解析它吗 <?xml version="1.0" encoding="utf-8"?> <root xmlns:android="www.google.com"> <passenger id = "001"> <name>Tom Cruise</name> </passenger> <passenger id = "002"> <n

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

<?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>

汤姆克鲁斯
汤姆汉克斯
更新 这就是我尝试过的。此处提到的代码、问题等-

  • 创建一个
  • 从工厂获得许可证
  • 使用生成器的
    parse()
    方法之一创建一个
  • 一旦您有了
    文档
    ,您就可以使用
    文档
    getElementsByTagName()
    方法获取乘客

  • 我相信您将能够解决其余问题。

    这里是一个工作示例,尽管我建议您使用StAX,但您会发现SAX并不十分方便

    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 ();
    }
    
    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
    
    String str=”“+
    "" +
    "" +
    “汤姆·克鲁斯”+
    "" +
    "" +
    “汤姆·汉克斯”+
    "" +
    "";
    DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
    DocumentBuilder db=dbf.newDocumentBuilder();
    InputSource is=新的InputSource(新的StringReader(str));
    最终文件文件=db.parse(is);
    System.out.println(“节点名称”+document.getChildNodes().item(0).getChildNodes().item(1).getNodeName());
    
    尝试使用
    javax.xml.parsers.DocumentBuilder
    org.w3c.dom.Document
    类,然后在遇到问题时共享代码,这就是我尝试过的,但我没有得到一个正确的答案——试图通过逆向工程学习。尝试一下,解释你尝试了什么以及你在哪里遇到了困难总是很有用的。要求人们为你编写代码没有抓住要点;我们希望帮助您加快学习进度,如果不知道您正在努力解决什么问题,我们就无法做到这一点。
    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());