2012-01-03 9 views
0

2つのHTMLタグの間のテキストを抽出して文字列に格納する必要があります。次のように私が解析するHTMLの例は次のとおりです。Android:2つのHTMLタグ間でテキストを抽出

<div id=\"swiki.2.1\"> THE TEXT I NEED </div> 

私はパターン(swiki\.2\.1\\\")(.*)(\/div)を使用して、私はグループ$ 2からする文字列を取得するJavaでこれを行っています。しかし、これはアンドロイドでは機能しません。 $ 2の内容を印刷すると、何も表示されません。なぜなら、一致が失敗するからです。

誰もがAndroidでregexを使用して同様の問題を抱えていたか、または最初の場所でHTMLページを解析するためのより良い方法(非正規表現)があります。ここでも、これは標準のJavaテストプログラムでうまく動作します。どんな助けでも大歓迎です! XPathと当然のアンドロイドとの素晴らしい作品http://htmlcleaner.sourceforge.net/

素晴らしいlibに:私は常にHtmlCleanerを使用するHTML構文解析-もののため

+0

http://jsoup.org/アンドロイド用のバージョンが必要です...あなたのエラー/マッチについて失敗しているかもしれません...おそらくあなたがこのウェブサイトのモバイル版をロードしているデバイスで... – Selvin

+0

Thats非常に良い点。しかし、私はちょうどHTMLをチェックし、私が探しているものは、サイトのモバイル版では同じです。私は今、そのリンクを見て、後で返信します。ありがとう –

答えて

1

。 :-)

これは、あなたがURLからXMLをダウンロードして(もドキュメントに示されている)XML属性から特定の値を取得するためにそれを解析する方法を示しています。

public static String snapFromHtmlWithCookies(Context context, String xPath, String attrToSnap, String urlString, 
        String cookies) throws IOException, XPatherException { 
      String snap = ""; 

      // create an instance of HtmlCleaner 
      HtmlCleaner cleaner = new HtmlCleaner(); 

      // take default cleaner properties 
      CleanerProperties props = cleaner.getProperties(); 

      props.setAllowHtmlInsideAttributes(true); 
      props.setAllowMultiWordAttributes(true); 
      props.setRecognizeUnicodeChars(true); 
      props.setOmitComments(true); 

      URL url = new URL(urlString); 

      HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
      connection.setDoOutput(true); 

      // optional cookies 
      connection.setRequestProperty(context.getString(R.string.cookie_prefix), cookies); 
      connection.connect(); 

      // use the cleaner to "clean" the HTML and return it as a TagNode object 
      TagNode root = cleaner.clean(new InputStreamReader(connection.getInputStream())); 

      Object[] foundNodes = root.evaluateXPath(xPath); 

      if (foundNodes.length > 0) { 
        TagNode foundNode = (TagNode) foundNodes[0]; 
        snap = foundNode.getAttributeByName(attrToSnap); 
      } 

      return snap; 
    } 

ちょうどあなたのニーズに合わせてそれを編集。 :-)

+0

あなたの例のようなタグからテキスト値を取得したい場合:

THE TEXT I NEED
ContentNodeをチェックし、content.getContent()。toString()でテキスト値を取得する必要があります。 – einschnaehkeee

関連する問題