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 实例,我想要输入元素的前一个元素。输入元素的前一个元素每次都不同。我们不知道哪个标签元素将是输入元素的前一个元素。我只需要通过输入元素。因此,如果我说获取输入元素的前一个标签元素,它应该给我前一个标签元素,无论它是什么标签

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-1并检索其text()值。

这适用于您提供的 html,但您可能需要根据 html 表单的复杂性对其进行调整。还要小心IndexOutOfBoundsException

于 2013-11-08T14:11:34.853 回答