Java sax解析器错误

Java sax解析器错误,java,xml,sax,saxparser,Java,Xml,Sax,Saxparser,我使用的是JavaSAX解析器,我重写了 @Override public void characters(char ch[], int start, int length) throws SAXException { value = new String(ch, start, length); 在某些情况下,数组ch包含元素的qName,但不包含整个值 例如: ch = [... , x, s, d, :, n, a, m, e, >, 1, 2, 3] 但是xsd:name

我使用的是JavaSAX解析器,我重写了

@Override
public void characters(char ch[], int start, int length) throws SAXException {
    value = new String(ch, start, length);
在某些情况下,数组ch包含元素的qName,但不包含整个值

例如:

ch = [... , x, s, d, :, n, a, m, e, >, 1, 2, 3]
但是xsd:name的实际值是123456789

编辑

String responseString = Utils.getXml(url);

SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
handler = new SimpleHandler();
saxParser.parse(new InputSource(new StringReader(responseString)), handler);

List<Entit> list = handler.getList();
String responseString=Utils.getXml(url);
SAXParserFactory=SAXParserFactory.newInstance();
SAXParser SAXParser=factory.newSAXParser();
handler=新的SimpleHandler();
parse(新的InputSource(新的StringReader(responseString)),处理程序);
List=handler.getList();
我有这样的xml(当然原始xml要大得多)


11111111
22222222
123456789
333333333
我只得到一个xml值的错误


如何解决这个问题。

characters方法不一定返回整个字符集。每次调用
字符
时,都需要存储结果,例如:

final StringBuilder sb = new StringBuilder();

@Override
public void characters(char ch[], int start, int length) throws SAXException {
    sb.append(ch, start, length);
}
然后,当您找到结束元素标记或开始元素标记或任何大小写时,您需要重置
StringBuilder
(或您正在使用的任何东西)

请阅读以下方面的规范:

解析器将调用此方法来报告每个字符数据块。SAX解析器可以返回单个块中的所有连续字符数据,也可以将其拆分为几个块;但是,任何单个事件中的所有字符都必须来自同一外部实体,以便定位器提供有用的信息


通常,当您看到
startElement
endElement
时,应该删除文本缓冲区。通常,当看到这些字符时,您将对当前缓冲区执行某些操作。

字符
方法不一定返回整个字符集。每次调用
字符
时,都需要存储结果,例如:

final StringBuilder sb = new StringBuilder();

@Override
public void characters(char ch[], int start, int length) throws SAXException {
    sb.append(ch, start, length);
}
然后,当您找到结束元素标记或开始元素标记或任何大小写时,您需要重置
StringBuilder
(或您正在使用的任何东西)

请阅读以下方面的规范:

解析器将调用此方法来报告每个字符数据块。SAX解析器可以返回单个块中的所有连续字符数据,也可以将其拆分为几个块;但是,任何单个事件中的所有字符都必须来自同一外部实体,以便定位器提供有用的信息


通常,当您看到
startElement
endElement
时,应该删除文本缓冲区。通常,当看到当前缓冲区时,您会对其进行处理。

您能提供调用解析器和相应XML文档的代码吗?公平地说,您的总体问题是“如何获取元素的值”<代码>??不,我不这么认为。我在其他XML上获取值。所以我认为这是java sax语法中的一些错误。你真的想相信,你碰巧在每天成千上万的程序员使用的技术的一个非常常见的API部分中发现了一个错误,这已经超过十年了吗?责怪这些工具绝对不会让你有任何收获,你不希望这些事情成真。责怪你自己,直到你真的有100%的证据证明它是一个bug,只要它是你的问题,你就可以修复它。你能提供调用解析器和相应XML文档的代码吗?公平地说,你的总体问题是“我如何获得元素
的值?”不,我不这么认为。我在其他XML上获取值。所以我认为这是java sax语法中的一些错误。你真的想相信,你碰巧在每天成千上万的程序员使用的技术的一个非常常见的API部分中发现了一个错误,这已经超过十年了吗?责怪这些工具绝对不会让你有任何收获,你不希望这些事情成真。责怪你自己,直到你真的有100%的证据证明它是一个bug,只要它是你的问题,你就可以修复它。