j2me:如何将字节数组解析为 xml,然后从该 XML 读取和显示特定数据

Posted

技术标签:

【中文标题】j2me:如何将字节数组解析为 xml,然后从该 XML 读取和显示特定数据【英文标题】:j2me: How to parse a byte array into xml and then read and display specific data from that XML 【发布时间】:2014-05-19 05:21:15 【问题描述】:

我正在使用以 xml 格式返回数据的 ASP.NET Web API 方法。 一切都很好,直到我不得不解析我得到的字节数组,这是由 openInputStream 产生的。 每个人都说使用这个或那个库,但不幸的是没有太多信息,我发现的唯一体面的例子是来自一个被弃用的名为 KXML 的库,其中作者阅读了一个物理文档(显然不是我的情况)。 就我个人而言,我想使用 KXML2,但我现在很绝望,并且对第一个让我以最简单的方式读取 XML 的解决方案持开放态度。

这是我用来使用 Web API 方法的代码:

HttpConnection connection = null;
InputStream is = null;

final ByteArrayOutputStream bos = new ByteArrayOutputStream();

byte[] response = null;

try 
    connection = (HttpConnection)Connector.open("http://myminimarket/api/customers/GetCustomers", Connector.READ);
    connection.setRequestMethod(HttpConnection.GET);

    connection.setRequestProperty("User-Agent", "Profile/MIDP-2.0 Configuration/CLDC-1.1");

    if (connection.getResponseCode() == HttpConnection.HTTP_OK) 
        is = connection.openInputStream();

        if (is != null) 
            int ch = -1;

            while ((ch = is.read()) != -1) 
                bos.write(ch);
            

            response = bos.toByteArray();
        
    
 catch (Exception e) 
    e.printStackTrace();
 finally 
    try 
        if (bos != null) 
            bos.close();            
        

        if (is != null) 
            is.close();
            is = null;
        

        if (connection != null) 
            connection.close();
            connection = null;
        
     catch (Exception e2) 
        e2.printStackTrace();
    

这是我从 GetCustomers 方法获得的 XML 结果示例:

<ArrayOfCustomer xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/WSWebAPI.Helpers">
<Customer>
<codigoCli>30</codigoCli>
<direccion>MCDO. SAN MARTIN PSTO. Nº 06</direccion>
<nroID>26626315</nroID>
<nroTelef>365548</nroTelef>
<razonSocial>ABANTO CASTAÑEDA, PAULA</razonSocial>
<tipoPersona>N</tipoPersona>
</Customer>
<codigoCli>61</codigoCli>
<direccion>
JR. SANTA TERESA DE JUORNET MZA. L. LOTE 11 (FRENTE AL QUINDE-COSTADO DE FARMACIA)
</direccion>
<nroID>10414741067</nroID>
<nroTelef/>
<razonSocial>ACUÑA SIFUENTES, ILZE SOLEDAD</razonSocial>
<tipoPersona>N</tipoPersona>
</Customer>
<Customer>
<codigoCli>69</codigoCli>
<direccion>JR. JOSE GALVEZ Nº 478</direccion>
<nroID>15586005</nroID>
<nroTelef/>
<razonSocial>AEDO YANQUI, MARGARITA</razonSocial>
<tipoPersona>N</tipoPersona>
</Customer>
<Customer>
<codigoCli>115</codigoCli>
<direccion>JR. AMALIA PUGA Nº 1008 TELEF. 367878</direccion>
<nroID>10266028356</nroID>
<nroTelef/>
<razonSocial>ALARCON ZEGARRA, EDULFO</razonSocial>
<tipoPersona>N</tipoPersona>
</Customer>

有了这些细节,我想找到一种方法来显示这样的东西:

1 号客户:

codigoCli: 30

方向:MCDO。圣马丁 PSTO。 Nº 06

nroID : 26626315

nroTelef:365548

razonSocial:ABANTO CASTAÑEDA,PAULA

tipoPersona:N


客户#2:

.....

我真的希望你能理解我的情况,作为一名 .net 开发人员,在这样的主题上找不到太多信息真的很令人沮丧。

如果您能提供任何帮助,我们将不胜感激。

提前致谢。

【问题讨论】:

你看过这个答案了吗?在这里,我解释了如何解析来自 Java2ME Parsing XML 的 XML 谢谢。它看起来很棒,它可能是我正在寻找的。问题是由于某种原因,此时执行停止:XMLParser myParser = new XMLParser(); 有异常吗?? 是的,既然你提到了它。这是我从输出窗口“未捕获的异常:java.lang.NoClassDefFoundError: com/sun/lwuit/xml/XMLParser - MIDkxml.lookUp(MIDkxml.java:112) - MIDkxml.run(MIDkxml.java:65)在 java.lang.Thread.run(Thread.java:744)" 我对使用 lwit 很感兴趣,因为我们不需要创建类来读取 XML 文件 【参考方案1】:

您可以使用 setInput(new ByteArrayInputStream(response), null /null 进行自动检测,或指定正确的编码 id 字符串/) 方法来解析 xml 响应。或者kxml2到底有什么问题?

【讨论】:

我找到了这个教程 developer.nokia.com/community/wiki/XML_Parser_in_Java_ME ,但是 XML 是从现有文件中读取的 @alex 在该教程中我不明白的另一件事是,作为 Java 世界的新手,是“实用程序”的东西 这是一个使用 kxml2 解析你的 XML 的示例代码,它太大了无法评论,所以这里是一个链接:Kxml2Demo.java。方法 GetCustomer 从 file 读取内容并返回字节数组以显示如何将其用作解析器的输入。 非常感谢,这超出了我的预期。但是告诉我,它是为了一个 MIDLET 吗?我问是因为据我所知,程序应该遵循一个结构,例如有一个 startApp() 方法。 当然可以在midlet中使用解析码code。示例中有main(string[]) 方法,因此我可以在Windows 命令行上对其进行测试:)。我在我的 j2me 应用程序(midlet)中使用 KXML2 来解析 XML。我相信该示例仅针对 CLDC-1.1 和 kxml2 构建和运行。

以上是关于j2me:如何将字节数组解析为 xml,然后从该 XML 读取和显示特定数据的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中解析字节数组

Java中的解析字节数组

j2me中的xml解析

J2ME - 在添加记录时直接从 RecordStore 读取或将记录存储在 Vector 中,稍后从该向量中检索它们

将二进制字符串转换为字节数组

如何从Oracle数据库中的Object Type生成XML