SAX解析器返回相同的元素与第二次为空

问题描述:

我的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解析器两次返回的一切吗?

您不覆盖endElement()方法。字符()可能会被多次调用,您应该收集您感兴趣的数据,而不是在首次调用字符()时分配它。

然后解析器击中</title>标签,但您没有看到它并收集另一个字符块,直到下一个<link>标签。您应该覆盖startElement和endElement两种方法,收集字符串并在碰到endElement()

时报告