3

次のようなhtmlがあります。

<---Some HTML code before --->
<label class="inputLabel" for="zipCodeEntry" style="display: block;">zip code</label>
<input id="zipCodeEntry" class="login" type="text" value="" maxlength="5" name="zipcode">
<---Some HTML code before --->

私のJavaコード

Elements formElements =  doc.getElementsByTag("form");
for(Element formElem : formElements){
     Elements inputElements = formElem.getElementsByTag("input");
     for(Element inputElem : inputElements){
         String name = inputElem.attr("name");
        /* Need to scrape label text here. I've inputElemen Object here.*/
     }
}

質問: 上記のコードで述べたように、inputElem のインスタンスがあります。input 要素の前の要素が必要です。入力要素の前の要素が毎回異なります。どのタグ要素が入力要素の前の要素になるかはわかりません。入力要素のみを通過する必要があります。したがって、入力要素の前のタグ要素を取得すると言うと、タグが何であれ、前のタグ要素を取得する必要があります

4

1 に答える 1

4

すべてのフォーム要素 (その子要素) を解析し、タグに遭遇した場合は<input>、前の子タグからテキストを取得できます。

例:

Elements formElements =  doc.getElementsByTag("form");            // select all of the forms from the document
for(Element formElem : formElements) {
    Elements formChildren = formElem.select("*");                 // select all child tags of the form
    for(Element formChild : formChildren) {
        if (formChild.tagName().equals("input")) {                // if the child is <input>
             String name = formChild.attr("name");                // get <input> name attribute
             String label = formChildren
               .get(formChildren.indexOf(formChild) - 1).text();  // get text from previous child element
        }
    }
} 

したがって、この例でnameは、「zipcode」にlabelなり、「zip code」になります。のインデックスを持つ要素を取得し、その値を取得<input>するだけなので、前の要素が何であるかは問題ではありません。i-1text()

これは、提供された html ではうまく機能しますが、html フォームの複雑さに応じて微調整が必​​要になる場合があります。にもご注意IndexOutOfBoundsExceptionください。

于 2013-11-08T14:11:34.853 に答える