2012-12-10 25 views
0

的輸出,我看到一個例子,mykong - http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/ 我試圖使它XML文件(如下所示)通過在上述頁面進行以下修改的代碼工作 -錯誤在一個簡單的SAX解析器

1 - Have only two if blocks in startElement() and characters() methods. 
2 - Change the print statements in above methods, ie 
    FIRSTNAME and First Name = passenger id 
    LASTNAME and Last Name = name   

問題是 - 在輸出中,我看到乘客這個詞而不是乘客id的值。我如何解決這個問題?

<?xml version="1.0" encoding="utf-8"?> 
<root xmlns:android="www.google.com"> 

<passenger id="001"> 
<name>Tom Cruise</name> 
</passenger> 

<passenger id="002"> 
<name>Tom Hanks</name> 
</passenger> 

</root> 

Java代碼的

import javax.xml.parsers.SAXParser; 
import javax.xml.parsers.SAXParserFactory; 
import org.xml.sax.Attributes; 
import org.xml.sax.SAXException; 
import org.xml.sax.helpers.DefaultHandler; 

public class ReadXMLFileSAX{ 

public static void main(String argv[]) { 

try { 

SAXParserFactory factory = SAXParserFactory.newInstance(); 
SAXParser saxParser = factory.newSAXParser(); 

DefaultHandler handler = new DefaultHandler() { 

boolean bfname = false; 
boolean blname = false; 

public void startElement(String uri, String localName,String qName, 
      Attributes attributes) throws SAXException { 

    System.out.println("Start Element :" + qName); 

    if (qName.equalsIgnoreCase("passenger id")) { 
     bfname = true; 
    } 

    if (qName.equalsIgnoreCase("name")) { 
     blname = true; 
    } 

} 

public void endElement(String uri, String localName, 
    String qName) throws SAXException { 

    System.out.println("End Element :" + qName); 

} 

public void characters(char ch[], int start, int length) throws SAXException { 

    if (bfname) { 
     System.out.println("passenger id : " + new String(ch, start, length)); 
     bfname = false; 
    } 

    if (blname) { 
     System.out.println("name : " + new String(ch, start, length)); 
     blname = false; 
    } 

} 

}; 

    saxParser.parse("c:\\flight.xml", handler); 

} catch (Exception e) { 
    e.printStackTrace(); 
    } 

    } 

} 
+0

我們可以看看你的代碼嗎? –

+0

@BrianAgnew - 現在添加了代碼。請讓我知道是否需要其他東西。 謝謝 –

+0

答案在這裏 - http://stackoverflow.com/questions/13818129/how-do-i-parse-my-simple-xml-file-with-java-and-sax –

回答

1

在的startElement,當它是 「乘客」,屬性參數,你得到的將有一個價值。

public void startElement(String uri, String localName, 
    String qName, Attributes attributes) 
     throws SAXException { 
    if (qName.equalsIgnoreCase("passenger") && attributes != null){ 
     System.out.println(attributes.getValue("id")); 
    } 
} 
+0

其實我不'請妥善理解主要代碼。我修改了我的代碼(如下),但我仍然無法看到乘客ID。 >>>>>>>>>>>>>>>>>>>>>>>>>> public void startElement(String uri,String localName,String qName, Attributes attributes)throws SAXException { \t \t System.out.println(「Start Element:」+ qName); \t \t \t 如果\t(localName.equalsIgnoreCase( 「乘客ID」)){ \t \t的System.out.println( 「乘客:」 + attributes.getValue( 「ID」)); \t \t} \t \t \t \t \t如果(qName.equalsIgnoreCase( 「乘客ID」)){ \t \t \t bfname = TRUE; \t \t} \t \t如果(qName.equalsIgnoreCase( 「名稱」)){ \t \t \t blname = TRUE; \t \t} \t \t \t} –

+0

我已經更新中的startElement使用QNAME的代碼。它比較和打印乘客ID。 –

+0

我把localName改成了qName,但是我得到了同樣的問題 - 沒有id,只打印了客人的單詞。 –