gpt4 book ai didi

java - 从输入流中过滤\n字符

转载 作者:行者123 更新时间:2023-11-29 22:19:21 25 4
gpt4 key购买 nike

我尝试使用 sax 解析器从输入流中解析 xml。输入流从套接字连续获取传入的 xml。 '\n' 用作 xml 数据之间的分隔符。这是 xml 的样子

<?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>

这对我们的 iphone 项目非常有效,因为我们将字符提取到\n 并将其存储在字符串中并使用 dom 解析器。

但是当我尝试为 android 执行此操作时,字符串不是一个选项,因为它给了我们 OutOfMemory 异常。所以我们直接将输入流设置为 SaxParser 它一直工作到\n 字符,之后它给我们异常

org.apache.harmony.xml.ExpatParser$ParseException: At line 2, column 0: junk after document element

所以我尝试过滤输入流以跳过“\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?

编辑根据 graham 所说,我能够通过删除所有文档类型并添加我自己的开始和结束标记来解析整个数据。所以我不太确定我的问题不是单独过滤'\n'。您如何解析像这样不断出现的 xml?

最佳答案

问题不在于 \n .就是第一个</response>之后标签,它认为文档是完整的。

此数据不是有效的 XML。您应该将所有内容都包装在一个顶级节点中。另外,你不能有第二个 <?xml version="1.0" encoding="UTF-8"?>在文档中途声明。

关于java - 从输入流中过滤\n字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7659998/

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