2011-06-30 20 views
3

私はアンドロイドアプリケーションを作成しています。ウェブからXML文字列を取得し、そこに含まれるすべての情報を取得したいと考えています。すべての まず、私は文字列(このコードは動作します)を取得:次にJavaのxml文字列を解析する際の問題


URL url = new URL("here my adrress"); 
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream())); 
String myData = reader.readLine(); 
reader.close(); 

を、私はDOMを使用します。それでも


DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
DocumentBuilder db = dbf.newDocumentBuilder(); 
InputSource is = new InputSource(); 
is.setCharacterStream(new StringReader(myData)); 

問題ありません。私が書くとき


Document doc = db.parse(is); 

アプリケーションはそれ以上何もしません。エラーなく停止します。 誰かが何が起こっているか教えてもらえますか?

答えて

4

エラーがないので、コードが機能しない理由はわかりませんが、代替案を提示できます。

まず、新しいInputStream isが不要であることを確信しています。 "parse()"は引数として "url.openStream()"または "myData"を直接取ることができます。

xmlデータに複数の行が含まれている可能性があります(コードの最初の部分が機能していると言われていますが、確かに言及したいと思います)。そうであれば、 "reader.readLine()"はXMLデータの一部を取得するだけです。

こちらがお役に立てば幸いです。

+0

実際は問題でした。 "Document doc = db.parse(url.openStream()); reader.close();"でコードを変更しました。それは魅力のように働いた。非常に参考になりました、ありがとう! – b3by

1

利用XmlPullParser上の2つの良いチュートリアルです、それは非常に高速です。 Webから文字列を渡し、すべての値を含むハッシュテーブルを取得します。

public Hashtable<String, String> parse(String myData) { 
    XmlPullParser parser = Xml.newPullParser(); 
    Hashtable<String, String> responseFromServer = new Hashtable<String, String>(); 

    try { 
     parser.setInput(new StringReader (responseString)); 
     int eventType = parser.getEventType(); 
     while (eventType != XmlPullParser.END_DOCUMENT) { 
      if(eventType == XmlPullParser.START_TAG) { 
       String currentName = parser.getName(); 
       String currentText = parser.nextText(); 

       if (currentText.trim().length() > 0) { 
        responseFromServer.put(currentName, currentText); 
       } 
      }    
      eventType = parser.next(); 
     }   
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return responseFromServer; 
} 
関連する問題