1

HTMLページからHTML要素を解析する必要があるJavaアプリケーションがあります。私の簡単なHTMLテストは次のように設定されています。

<!DOCTYPE html>
<html>
<head>
<style type='text/css'>
  div {width:100%;height:100px;background-color:blue;}
</style>
</head>
<body>
  <div></div>
</body>
</html>

私のコードは、ドキュメントで次の文字列を検索するように設定されます: "<style"

次に、終了キャロット: ">"を検索します。これは、ユーザーがHTMLファイルに次の組み合わせのいずれかを入力した可能性があるためです。

<style type="text/css">

or

<style type = "text/css" >

or

<style type = 'text/css' >

or 

<style type='text/css'>

etc..

だから私の方法は、「スタイル」タグとその最後のニンジンまでのすべてを見つけることです

次に、終了スタイルタグを見つけます。

</style>

次に、これら2つのエンティティ間のすべてを取得します。

これが私のファイルとそのコードです:

************strings.xml************

String txt_style_opentag = "<style"
String txt_end_carrot = ">"
String txt_style_closetag = "</style>"

***********************************





************Parser.java************
public static String getStyle(Context context, String text) {
    String style = "";

    String openTag = context.getString(R.string.txt_style_opentag);
    String closeTag = context.getString(R.string.txt_style_closetag);
    String endCarrot = context.getString(R.string.txt_end_carrot);

    int openPos1 = text.indexOf(openTag);
    int openPos = text.indexOf(endCarrot, openPos1);
    int closePos = text.indexOf(closeTag, openPos1);

    if (openPos != -1 && closePos != -1)
        style = text.substring(openPos + openTag.length(), closePos).trim();

    if (style != null && style.length() > 0 && style.charAt(0) == '\n')     // first \n remove
        style = style.substring(1, style.length());

    if (style != null && style.length() > 0 && style.charAt(style.length() - 1) == '\n')    // last \n remove
        style = style.substring(0, style.length() - 1);

    return style;
}
********************************************************

私の結果は近いですが、正しくありません。結果は次のとおりです。

{width:100%;height:100px;background-color:blue;}

お気づきの方は、「div」の部分がありません。次のようになります。

div {width:100%;height:100px;background-color:blue;}

私はここで何を間違っているのですか。誰か助けてもらえますか?

4

2 に答える 2

1

開始タグ (終了ブラケット>) の末尾から部分文字列を取得し、開始タグの長さを (ではなくendCarrot) 追加することで、部分文字列の開始位置を目的の位置より前に移動します。あなたがしたい

style = text.substring(openPos + endCarrot.length(), closePos).trim();
于 2013-03-12T15:01:55.243 に答える
0

もちろん...助けを求めた直後に、私はついにそれを理解しました. 次のコードを変更する必要があります

から:

style = text.substring(openPos + openTag.length(), closePos).trim();

に:

style = text.substring(openPos + endCarrot.length(), closePos).trim();

投稿失礼します。そして、推奨事項をありがとう

于 2013-03-12T15:01:01.337 に答える