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