gpt4 book ai didi

java - SAX 解析器两次返回相同的元素,第二次为空

转载 作者:行者123 更新时间:2023-11-30 02:36:32 25 4
gpt4 key购买 nike

当我试图解析简单的 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 Parser 返回所有内容两次?

最佳答案

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

然后解析器命中 </title>标记,但您看不到它并收集另一 block 字符,直到下一个 <link>标签。您应该覆盖 startElement 和 endElement 方法,收集您的字符串并在点击 endElement() 时报告它们

关于java - SAX 解析器两次返回相同的元素,第二次为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26451645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com