2010-02-12 69 views
2

我一直在擺弄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

回答

3

好的,所以你需要做的是實現你自己的處理程序(而不是使用默認的處理程序)。因此,與

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

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); 
         } 
       }); 
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] 

在我看來這是接近你會得到BeautifulSoup在Java兼容的方式特定的外觀。

2

你必須用你自己的實現來擴展DefaultHandler。如果您正在處理大型文檔,薩克斯解析器很好。如果不是,那麼使用另一個xml解析器可能會更好,例如dom4j。

下面是一個簡單sax tutorial

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

是的,這是不必要的冗長。

相關問題