2
私はjsoupを使ってHTMLページを解析し、フォームを送信します。私はフォームを提出する前に "戻る"ボタンを削除する必要があります。私はelement.remove()
メソッドを使用していますが、その後私はform.formData()
が変更されていないことを確認します。要求された要素はform.children()
から削除されましたが、form.elements()
に存在します。これはバグですか?またはフォームから要素を削除するのに間違った方法を使用しますか?JSoup:フォームから要素を削除するにはどうすればよいですか?
public class JsoupCheck {
public static void main(String[] args) {
String html = "<html><body><form action=\"demo\">"
+ "<input type=\"submit\" name=\"buttonSave\" value=\"Save\">"
+ "<input type=\"submit\" name=\"buttonBack\" value=\"Back\">"
+ "<select name=\"selection\">"
+ " <option value=\"value1\">Value 1</option>"
+ " <option value=\"value2\" selected>Value 2</option>"
+ " <option value=\"value3\">Value 3</option>"
+ "</select>"
+ "</form></body></html>";
Document doc = Jsoup.parse(html);
FormElement form = (FormElement) doc.select("form").first();
Element e = form.select("form").first();
System.out.println("=== Original content of form");
System.out.println(e);
System.out.println("=== Original content of form.formData()");
for (Connection.KeyVal i : form.formData()) {
System.out.println(i.key() + "=" + i.value());
}
System.out.println("form.elements().size() = " + form.elements().size());
System.out.println("form.children().size() = " + form.children().size());
e.select("input[name=buttonBack]").remove();
System.out.println();
System.out.println("=== Content of form after remove buttonBack (result: buttonBack removed)");
System.out.println(e);
System.out.println("=== Content of form.formData() after remove buttonBack (result: buttonBack exist)");
for (Connection.KeyVal i : form.formData()) {
System.out.println(i.key() + "=" + i.value());
}
System.out.println("form.elements().size() = " + form.elements().size());
System.out.println("form.children().size() = " + form.children().size());
}
}
出力は次のとおりです。
=== Original content of form
<form action="demo">
<input type="submit" name="buttonSave" value="Save">
<input type="submit" name="buttonBack" value="Back">
<select name="selection"> <option value="value1">Value 1</option> <option value="value2" selected>Value 2</option> <option value="value3">Value 3</option></select>
</form>
=== Original content of form.formData()
buttonSave=Save
buttonBack=Back
selection=value2
form.elements().size() = 3
form.children().size() = 3
=== Content of form after remove buttonBack (result: buttonBack removed)
<form action="demo">
<input type="submit" name="buttonSave" value="Save">
<select name="selection"> <option value="value1">Value 1</option> <option value="value2" selected>Value 2</option> <option value="value3">Value 3</option></select>
</form>
=== Content of form.formData() after remove buttonBack (result: buttonBack exist)
buttonSave=Save
buttonBack=Back
selection=value2
form.elements().size() = 3
form.children().size() = 2