2011-08-07 51 views
0

我正在嘗試將XML數據從MIDP設備獲取到Servlet。 Servlet正在獲取以下數據 -將UTF字符串轉換爲InputStream

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(); 
        } 
       } 

我遇到的問題是,只有裏面的文件是不斷印刷。這意味着第二個打印語句沒有機會執行。我用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字符串數據。

+0

你說「第二個打印語句沒有機會執行」 - 爲什麼不添加'else'子句來顯示'xpp.getName()* * *是否爲空? –

+0

但是這意味着沒有節點,因爲null返回了嗎? – Chan

+0

好吧,這意味着它不是開始/結束元素節點或實體引用。它可能是TEXT,或START_DOCUMENT等。 –

回答

3

我不知道您的XmlPullParser代碼,但是您的dom4j代碼已損壞。您已要求SAXReader向您提供其文檔工廠,然後您要求提供新文檔,然後打印它。換句話說,這與從stringReader中讀取的數據無關。你是忽略read調用的結果。試試這個:

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

看看是否顯示完整的XML。

我注意到,在XmlPullParser的代碼中,你並不像往常那樣循環 - 你只是讀第一個節點,檢查它,然後重新指定event的值 - 然後不做別的。

+0

謝謝它只是救了我的生命^^ – Chan