0

やあみんな、私は与えられたHTMLドキュメントが整形式であるかどうかを判断する必要があります。
JavaコアAPIクラスのみを使用する単純な実装が必要です。つまり、JTIDYなどのサードパーティのものは必要ありません。ありがとう。

実際に必要なのは、TAGのリストをスキャンするアルゴリズムです。オープンタグが見つかり、次のタグが対応するクローズタグではない場合は、別のオープンタグである必要があり、次のタグとしてクローズタグが必要です。そうでない場合は、別のオープンタグである必要があります。次に対応するクローズタグ、およびリストの次に来る逆の順序で前のオープンタグのクローズタグ。タグをクローズタグに変換するメソッドはすでに作成しました。リストがこの順序に準拠している場合は、trueまたはfalseを返します。

これが私がすでに取り組み始めたもののスケルトンコードです。あまりきれいではありませんが、私がやろうとしていることの基本的な考え方を皆さんに提供するはずです。

public boolean validateHtml(){

    ArrayList<String> tags = fetchTags();
    //fetchTags returns this [<html>, <head>, <title>, </title>, </head>, <body>, <h1>, </h1>, </body>, </html>]

    //I create another ArrayList to store tags that I haven't found its corresponding close tag yet
    ArrayList<String> unclosedTags = new ArrayList<String>();

    String temp;

    for (int i = 0; i < tags.size(); i++) {

        temp = tags.get(i);

        if(!tags.get(i+1).equals(TagOperations.convertToCloseTag(tags.get(i)))){
            unclosedTags.add(tags.get(i));
            if(){

            }

        }else{
            return true;//well formed html
        }
    }

    return true;
}
4

3 に答える 3

1

ええ、文字列の操作は時々ピクルスのように見えることがあります、あなたは次のようなことをする必要があります

最初にhtmlを配列にコピーします

bool tag = false;
string str = "";
List<string> htmlTags = new List();

for(int i = 0; i < array.length; i++)
{ 
  //Check for the start of a tag
  if(array[i] == '<')
  {
    tag == true;
  }

  //If the current char is part of a tag start copying
  if(tag)
  {
    str += char;
  }

  //When a tag ends add the tag to your tag list
  if(array[i] == '>')
  {
    htmlTags.Add(str);
    str = "";
    tag == false;
  }
}

このようなもので始める必要があります。タグの配列で終わる必要があります。これは疑似コードにすぎないため、コンパイルしないでください。

于 2011-03-01T13:14:26.133 に答える
0

膨大な量の作業を行わずにこれを行うことができるとは思わないでください。サードパーティのパッケージを使用する方がはるかに簡単です。

于 2011-03-01T12:50:04.893 に答える
0

HTML4、4.1、またはXHTML1DTDに対して検証してみてください

"strict.dtd"
"loose.dtd"
"frameset.dtd"

これは役立つかもしれません!

于 2011-03-01T13:47:39.177 に答える