有人可以帮我这个JAVA SAXParser吗?

时间:2010-02-12 08:29:14

标签: java python xml

我已经摆弄了3个小时,我无法让这个F *****解析器工作。抱歉诅咒。 我不明白为什么我找不到那些我想要的一个体面的教程

我只想发送一个String / 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行代码。

5 个答案:

答案 0 :(得分: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);
                      } 
                 });

答案 1 :(得分: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至少3年了,为了回复你的帖子,我只是向Google寻求帮助。

编辑:

好的,这样可以解决问题。曾经有一个SAX的官方Java教程,我现在无法在网上找到,但是仍有许多不错的非官方教程可以提供很多帮助。例如,尝试使用此功能:http://www.java-samples.com/showtutorial.php?tutorialid=152

答案 2 :(得分:2)

您必须使用自己的实现扩展DefaultHandler。如果您使用大型文档,则sax解析器很好。如果没有,您可能最好使用另一个xml解析器,例如dom4j。

这是一个简单的sax tutorial

答案 3 :(得分:0)

我不知道这是否适合您,但是由于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一样接近。

答案 4 :(得分:0)

使用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);

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