2014-10-19 23 views
0

我的SAX解析器兩次做,當我試圖解析簡單的XML文件奇怪的事情,SAX解析器返回相同的元素與第二次爲空

這是我的xml文件,

<?xml version="1.0"?> 
<organization> 
       <employee> 
           <title>Harry0</title> 
           <link>Smith0</link> 
           <date>hs0</date> 
           <salary>200000-0</salary> 
       </employee> 

       <employee> 
           <title>Harry1</title> 
           <link>Smith1</link> 
           <date>hs1</date> 
           <salary>300000-1</salary> 
       </employee> 

       <employee> 
           <title>Harry2</title> 
           <link>Smith2</link> 
           <date>hs2</date> 
           <salary>300000-2</salary> 
       </employee> 
</organization> 

現在如果我想只讀取title元素,

String elementValue = null; 
String localName = null; 
@Override 
public void startElement(String uri, String localName, String qName, 
     Attributes attributes) throws SAXException { 
      this.localName = localName; 
} 


@Override 
public void characters(char[] ch, int start, int length) 
     throws SAXException { 
     elementValue = new String(ch, start, length); 
     if (localName.equals("title")){ 
      Log.e(localName,elementValue); 
     } 

} 

和輸出,

10-19 14:41:02.261: E/title(7754): Harry0 
10-19 14:41:02.261: E/title(7754):         
10-19 14:41:02.281: E/title(7754): Harry1 
10-19 14:41:02.297: E/title(7754):         
10-19 14:41:02.297: E/title(7754): Harry2 
10-19 14:41:02.297: E/title(7754): 

的空行標記名稱以及標題行是一樣的,即title

爲什麼SAX解析器兩次返回的一切嗎?

回答

1

您不覆蓋endElement()方法。字符()可能會被多次調用,您應該收集您感興趣的數據,而不是在首次調用字符()時分配它。

然後解析器擊中</title>標籤,但您沒有看到它並收集另一個字符塊,直到下一個<link>標籤。您應該覆蓋startElement和endElement兩種方法,收集字符串並在碰到endElement()

時報告