【问题标题】:Can someone help me with this JAVA SAXParser?有人可以帮我解决这个 JAVA SAXParser 吗?
【发布时间】:2010-02-12 08:29:14
【问题描述】:

我已经摆弄了 3 个小时,但我无法让这个 F***** 解析器工作。很抱歉诅咒。 我不明白为什么我找不到 一个像样的教程 完全符合我的要求。

我只想向函数发送一个字符串/XML。然后,解析它。这并不难。在python中,我可以闭着眼睛做。很棒的文档就在这里:http://www.crummy.com/software/BeautifulSoup/documentation.html

import BeautifulSoup
soup = BeautifulSoup(the_xml)
persons_name = soup.findAll('first_name')[0].string

为什么我找不到一个好的、简单的文档来教我如何解析 XML????这是我当前的 JAVA SAX 代码,它不工作,我什至不知道为什么。

  public static void parseit(String thexml)
    {
      SAXParserFactory factory = SAXParserFactory.newInstance();
      try {   
            SAXParser saxParser = factory.newSAXParser();
            saxParser.parse( thexml , new DefaultHandler() );
      } catch (Throwable err) {
            err.printStackTrace ();
      }
    }

谁能给我写代码来使用 SAX 解析器解析 XML...请...这就像 5 行代码。

【问题讨论】:

标签: java python xml


【解决方案1】:

好的,所以您需要做的是实现您自己的处理程序(而不是使用默认处理程序)。所以替换

saxParser.parse( thexml , new DefaultHandler() );

与

 saxParser.parse( thexml , new MyFreakingHandler() );

MyFreakingHandler 实现接口 HandlerBase 或者它可以扩展 DefaultHandler 类。然后简单地为这样的方法提供实现,比如

public void startDocument () throws SAXException
public void endElement (String name) throws SAXException

我不知道为什么您在网上找不到任何教程。我已经至少 3 年没有使用 SAXParser 了,为了回答您的帖子,我只是向 Google 寻求帮助。

编辑:

好的,所以把事情弄清楚。曾经有一个 SAX 的官方 Java 教程,不知何故我现在在网上找不到,但是仍然有一些不错的非官方教程可能会很有帮助。试试这个,例如:http://www.java-samples.com/showtutorial.php?tutorialid=152

【讨论】:

    【解决方案2】:

    您必须扩展您的默认处理程序 DefaultHandler。例如,试试这个:

     saxParser.parse( new InputSource(new StringReader(thexml)) , new DefaultHandler()
                    {
                    public void     startElement(String uri, String localName, String qName, Attributes attributes)
                          {
                          System.out.println("Hello "+qName);
                          } 
                     });
    

    【讨论】:

      【解决方案3】:

      您必须使用自己的实现来扩展 DefaultHandler。如果您正在处理大型文档,则 sax 解析器非常有用。如果没有,您最好使用另一个 xml 解析器,例如 dom4j。

      这是一个简单的sax tutorial

      【讨论】:

        【解决方案4】:

        使用 Java XPath API

        XPathFactory factory = XPathFactory.newInstance();
        XPath xPath = factory.newXPath();
        XPathExpression xPathExpression = xPath.compile("//first_name");
        NodeList nodes = (NodeList) xPathExpression.evaluate(
            new InputSource(new FileInputStream(the_xml)), XPathConstants.NODESET);
        

        是的,它是不必要的冗长。

        【讨论】:

          【解决方案5】:

          我不知道这是否适合您,但既然 Groovy 和 Java 配合得很好,为什么不尝试使用 Groovy options 之一来处理 XML。

          特别是查看 XML Slurper (http://groovy.codehaus.org/Reading+XML+using+Groovy's+XmlSlurper)

          def records = new XmlSlurper().parseText(thexml)
          def persons_name = records.first_name[0]
          

          在我看来,这与以 Java 兼容的方式接近 BeautifulSoup。

          【讨论】:

            猜你喜欢
            • 2018-08-13
            • 2015-05-31
            • 2016-07-09
            • 2023-03-19
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多