有人能帮我解决这个JAVA SAXParser吗?

2 投票
5 回答
711 浏览
提问于 2025-04-15 19:11

我已经折腾了三个小时,还是搞不定这个该死的解析器。抱歉说脏话。

我就是不明白,为什么我找不到一个合适的教程,能完全满足我的需求。

我只想给这个函数传一个字符串/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 个回答

2

你需要用自己的实现来扩展 DefaultHandler。SAX 解析器在处理大文档时效果不错。如果文档不大,可能用其他的 XML 解析器会更好,比如 dom4j。

这里有一个简单的 SAX 教程

3

你需要扩展你默认的处理器 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

好的,你需要做的是自己实现一个处理器,而不是使用默认的处理器。所以把

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

不过我不知道为什么你在网上找不到任何教程。我至少有三年没用过 SAXParser,为了回答你的问题,我只是简单地问了谷歌。

编辑:

好的,为了澄清一下。以前有一个官方的 Java SAX 教程,但我现在找不到了。不过,网上还有一些不错的非官方教程,应该会对你有帮助。比如你可以试试这个链接:http://www.java-samples.com/showtutorial.php?tutorialid=152

撰写回答