如何使用jsoup从我当前的元素实例中使用jsoup获取前一个元素

时间:2013-11-08 13:37:01

标签: jsoup

我有一些像这样的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元素的上一个元素每次都不同。我们不知道哪个标签元素将是input元素的前一个元素。我只需要通过输入元素。因此,如果我说得到输入元素的前一个标记元素,它应该给我以前的标记元素无论它是什么标记

1 个答案:

答案 0 :(得分:3)

您可以解析所有表单元素(其子元素),如果遇到<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将为“邮政编码”。 <input>之前的元素是什么并不重要,因为它只检索索引为i-1的任何元素并检索其text()值。

这适用于您提供的html,但您可能需要根据html表单的复杂程度进行调整。另外要小心IndexOutOfBoundsException