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

问题描述:

我一直在摆弄3个小时,我无法得到这个F *****解析器的工作。对不起,诅咒。 我不明白为什么我找不到一个像样的教程那正是我想要的。有人可以帮我用这个JAVA SAXParser吗?

我只想发送一个String/XML函数。然后,解析它。这并不难。在蟒蛇中,我可以闭着眼闭上眼睛。真棒,吓坏文档就在这里: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(); 
     } 
    } 

有人可以给我写代码来解析XML使用SAX解析器......请......它就像5行代码。

+1

不要尝试使用XML解析器来解析XML。改用正则表达式。 ;) – 2010-02-12 08:32:22

+1

我刚刚找到一个文档。 http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/ – TIMEX 2010-02-12 08:39:29

好的,所以你需要做的是实现你自己的处理程序(而不是使用默认的处理程序)。因此,与

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

其中MyFreakingHandler实现接口的HandlerBase取代

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

,或者它可以扩展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

您必须扩展您的默认处理程序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); 
         } 
       }); 

我不知道这将是一个选择,但由于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] 

在我看来这是接近你会得到BeautifulSoup在Java兼容的方式特定的外观。

你必须用你自己的实现来扩展DefaultHandler。如果您正在处理大型文档,萨克斯解析器很好。如果不是,那么使用另一个xml解析器可能会更好,例如dom4j。

下面是一个简单sax tutorial

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

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