使用SAX解析器时,如果节点内容中存在"解析",则解析失败.如何解决此问题?我是否需要转换所有字符?
换句话说,任何时候我在节点中都有引号:
<node>characters in node containing "quotes"</node>
Run Code Online (Sandbox Code Playgroud)
当Handler解析它时,该节点被屠宰成多个字符数组.这是正常的行为吗?引号为什么会引起这样的问题?
这是我正在使用的代码:
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
...
HttpGet httpget = new HttpGet(GATEWAY_URL + "/"+ question.getId());
httpget.setHeader("User-Agent", PayloadService.userAgent);
httpget.setHeader("Content-Type", "application/xml");
HttpResponse response = PayloadService.getHttpclient().execute(httpget);
HttpEntity entity = response.getEntity();
if(entity != null)
{
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
ConvoHandler convoHandler = new ConvoHandler();
xr.setContentHandler(convoHandler);
xr.parse(new InputSource(entity.getContent()));
entity.consumeContent();
messageList = convoHandler.getMessageList();
}
Run Code Online (Sandbox Code Playgroud)
错误发生在最近评论中引用的处理程序类中.
编写ContentHandler时常见的错误是假设只使用所有字符数据调用一次字符方法.实际上,它可以使用您必须收集的字符数据块多次调用.切入多个字符数组是正常行为.
您可能需要在startElement方法中启动收集器(可能是StringBuffer),在character方法中将数据收集到其中,然后使用endElement方法中的数据,该方法应该是注释中显示的message.setText的位置.
| 归档时间: |
|
| 查看次数: |
2658 次 |
| 最近记录: |