【问题标题】:How do I parse my simple XML file with Java and SAX?如何使用 Java 和 SAX 解析我的简单 XML 文件?
【发布时间】:2012-11-28 21:07:46
【问题描述】:

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

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

更新 这是我尝试过的。这里提到的代码、问题等 - Error in output of a simple SAX parser

【问题讨论】:

  • 尝试使用javax.xml.parsers.DocumentBuilderorg.w3c.dom.Document 类,如果遇到问题再分享代码。
  • 嗯,这是我尝试过的,但我没有得到引导我走向正确方向的答案 - stackoverflow.com/questions/13798038/…
  • 尝试通过逆向工程学习。
  • 解释你尝试了什么以及你卡在哪里总是有用的。让别人为你写代码没有抓住重点;我们希望帮助您提高学习曲线,而我们无法在不知道您遇到什么困难的情况下做到这一点。

标签: java xml xml-parsing


【解决方案1】:
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());

【讨论】:

    【解决方案2】:

    这是一个工作示例,虽然我建议您改用 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
    

    【讨论】:

      【解决方案3】:
      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 ();
      }
      

      【讨论】:

        【解决方案4】:
        1. 创建DocumentBuilderFactory
        2. 从工厂获取DocumentBuilder
        3. 使用构建器的parse() 方法之一创建Document
        4. 一旦你有了Document,你就可以用DocumentgetElementsByTagName()方法得到乘客Elements。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-07-27
          • 1970-01-01
          • 2011-04-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-07
          • 2011-06-17
          相关资源
          最近更新 更多