我有一些像这样的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元素的前一个元素。我只需要通过输入元素。因此,如果我说得到输入元素的前一个标记元素,它应该给我以前的标记元素无论它是什么标记
答案 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
。