我试图使用sax解析器从输入流中解析xml。输入流从套接字连续获得传入的xml。 '\ n'用作xml数据之间的分隔符。这是XML会是什么样子从输入流中筛选 n字符
<?xml version="1.0" encoding="UTF-8"?>
<response processor="header" callback="comheader">
<properties>
<timezone>Asia%2FBeirut</timezone>
<rawoffset>7200000</rawoffset>
<to_date>1319256000000</to_date>
<dstrawoffset>10800000</dstrawoffset>
</properties>
</response>
\n
<event type="progress" time="1317788744214">
<param key="callback">todayactions</param>
<param key="percent">10</param>
<param key="msg">MAPPING</param>
</event>
<event type="progress" time="1317788744216">
<param key="callback">todayactions</param>
<param key="percent">20</param><param key="msg">MAPPING</param>
</event>
\n
<?xml version="1.0" encoding="UTF-8"?>
<response processor="header" callback="comheader">
<properties>
<timezone>Asia%2FBeirut</timezone>
<rawoffset>7200000</rawoffset>
<to_date>1319256000000</to_date>
<dstrawoffset>10800000</dstrawoffset>
</properties>
</response>
这是我们采取的人物高达\ n和存储在一个字符串中,并用于DOM解析器完美工作了我们的iphone项目。
但是,当我试图这样做的android,字符串不是一个选项,因为它给我们OutOfMemory异常。所以我们直接设置的InputStream它的工作原理,直到\ n字符,之后,它为我们提供了异常的SAXParser
org.apache.harmony.xml.ExpatParser $ ParseException的:在第2行,列 0:文档元素后的垃圾
于是,我就过滤的InputStream跳过“\ n”字符。我创建了一个FilterStreamReader,但我没有成功,看来我的阅读功能没有完成这项工作。这是我的代码。
public class FilterStreamReader extends InputStreamReader {
public FilterStreamReader(InputStream in, String enc)
throws UnsupportedEncodingException {
super(in, enc);
}
@Override
public int read(char[] cbuf, int off, int len) throws IOException {
int read = super.read(cbuf, off, len);
Log.e("Reader",Character.toString((char)read));
if (read == -1) {
return -1;
}
int pos = off - 1;
for (int readPos = off; readPos < off + read; readPos++) {
if (read == '\n') {
pos++;
} else {
continue;
}
if (pos < readPos) {
cbuf[pos] = cbuf[readPos];
}
}
return pos - off + 1;
}
有人可以帮我过滤输入流的\ n吗?
编辑 基于什么格雷厄姆说我能够通过删除所有的文档类型和添加我自己开始和结束标记来分析整个数据。所以我不确定我的问题不是单独过滤'\ n'。你如何分析继续这样的xml?
检查还存在\ r符号的,这取决于底层的操作系统上编写原始文件可能发生,你有\ r \ n而不是单\ R(如Linux)的 – barmaley