use*_*967 1 java xml sax saxparser
我正在使用java sax解析器,我重写
@Override
public void characters(char ch[], int start, int length) throws SAXException {
value = new String(ch, start, length);
Run Code Online (Sandbox Code Playgroud)
在某些情况下,数组ch包含qName元素但不包含整个值.
例:
ch = [... , x, s, d, :, n, a, m, e, >, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
但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();
Run Code Online (Sandbox Code Playgroud)
我有像这样的xml(当然原来的xml要大得多)
<root>
<el>
<xsd:name>11111111</xsd:name>
</el>
<el>
<xsd:name>22222222</xsd:name>
</el>
<el>
<xsd:name>123456789</xsd:name>
</el>
<el>
<xsd:name>333333333</xsd:name>
</el>
</root>
Run Code Online (Sandbox Code Playgroud)
我只是为xml中的一个值得到错误.
如何解决这个问题.
该characters方法并没有必然返回整个字符集.您需要在每次characters调用时存储结果,例如:
final StringBuilder sb = new StringBuilder();
@Override
public void characters(char ch[], int start, int length) throws SAXException {
sb.append(ch, start, length);
}
Run Code Online (Sandbox Code Playgroud)
然后,StringBuilder当您找到结束元素标记或开始元素标记或任何情况时,您需要重置您的(或您正在使用的任何内容).
阅读规范characters:
"解析器将调用此方法来报告每个字符数据块.SAX解析器可以在一个块中返回所有连续的字符数据,或者它们可以将它分成几个块;但是,任何单个事件中的所有字符都必须来自相同的外部实体,以便定位器提供有用的信息."
通常,您应该做的是在看到startElement或时删除文本缓冲区endElement.通常,当看到这些缓冲区时,您将对当前缓冲区执行某些操作.
| 归档时间: |
|
| 查看次数: |
459 次 |
| 最近记录: |