2011-08-07 4 views
0

MIDPデバイスからServletにXMLデータを取得しようとしています。サーブレットは次のようにデータを取得しています -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(); 
        } 
       } 

私が午前問題がドキュメント内に今までに印刷されていることです。つまり、2番目の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をInputStreamに変換する際に問題はありますか?そして私のXML Stringをデータにパースする別の方法があります。

+0

あなたは「2番目のprint文は実行する機会がありません」と言っていますが、 'xpp.getName()' *が* nullであるかどうかを表示するために 'else'節を追加してください。 –

+0

しかし、それはヌルが返ってくるので、そこにノードがないことを意味しますか? – 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が表示されているかどうかを確認してください。

通常のように、ループしていないコードはです。最初のノードを読み取り、調べてから、eventの値を再割り当てしてから何もしないことに注意してください。

+0

ちょうど私の人生を救いました^^ – Chan

関連する問題