将UTF字符串转换为InputStream

时间:2011-08-07 12:15:43

标签: java xml java-me utf-8 xml-parsing

我正在尝试从MIDP设备获取XML数据到Servlet。 Servlet正在如下获取数据 -

DataInputStream dis = new DataInputStream((InputStream) request.getInputStream());
        String readUTF = dis.readUTF();

从MIDP完成后我认为它已经结束了。但现在我无法将readUTF转换为InputStream。我想解析xml字符串。我使用了kXML 2.3.0,这里是代码 -

XmlPullParser xpp = new KXmlParser();
                try {
                    xpp.setInput(new InputStreamReader(new ByteArrayInputStream(readUTF.getBytes("UTF-8"))));
                    int event = xpp.getEventType();
                    if (event != xpp.END_DOCUMENT) {
                        System.out.println("Inside Document");
                        if (xpp.getName() != null) {
                            System.out.println("The tag is not null");
                            if (xpp.getName().equals("title")) {
                                System.out.println("Title =" + xpp.getText());
                            } else if (xpp.getName().equals("note")) {
                                System.out.println("Note =" + xpp.getText());
                            } else if (xpp.getName().equals("priority")) {
                                System.out.println("Priority =" + xpp.getText());
                            }
                        }
                        event = xpp.next();
                    }
                }

我遇到的问题是只打印内幕文件。这意味着第二个print语句没有机会执行。我使用Dom4j做同样的事情。

SAXReader sr = new SAXReader();
sr.read(stringReader);
System.out.println(sr.getDocumentFactory().createDocument().asXML());

结果就是这个 -

INFO: <?xml version="1.0" encoding="UTF-8"?>

原始字符串是 - <?xml version='1.0' encoding='UTF-8' ?> <data> <task><title>dsfsdfds</title><note>null</note><priority>High</priority></task><task><title>sdfsdfdsf</title><note>null</note><priority>High</priority></task> </data>

我为它验证了XML并且它完美地运行。将UTF-8转换为InputStreams有问题吗?还有另一种方法可以将我的XML String解析为数据。

1 个答案:

答案 0 :(得分:3)

我不知道您的XmlPullParser代码,但您的dom4j代码已损坏。您已经要求SAXReader为您提供文档 factory ,然后您要求提供新文档,然后打印它。换句话说,这与从stringReader读取的数据无关。您忽略 read来电的结果。试试这个:

SAXReader sr = new SAXReader();
Document doc = sr.read(stringReader);
System.out.println(doc.asXML());

查看是否显示完整的XML。

我注意到在XmlPullParser代码中你没有像往常那样循环 - 你只是读取第一个节点,检查它,然后重新分配event的值 - 然后没有做任何其他事情。