Jsoup:将子 <input> 元素附加到 <foorm> 不会影响表单数据

Posted

技术标签:

【中文标题】Jsoup:将子 <input> 元素附加到 <foorm> 不会影响表单数据【英文标题】:Jsoup: appending child <input> element to a <foorm> doesn't affect the form data 【发布时间】:2022-01-15 19:19:41 【问题描述】:

以下单元测试失败:

@Test
public void test() throws Exception 
    String html = "<html><form id=\"myform\"></form></html>";
    Document document = Jsoup.parse(html);
    Element inputElement = document.createElement("input");
    inputElement.attr("name", "any_name");
    inputElement.attr("value", "any_value");
    Element formElement = document.getElementById("myform");
    formElement = formElement.appendChild(inputElement);
    List<Connection.KeyVal> formData =  ((FormElement)formElement).formData();
    Assert.as-s-rt(1 == formData.size());

问题:

    是错误还是我做错了什么? 有解决方法吗?

【问题讨论】:

【参考方案1】:

您必须在表单中添加input 元素!

addElement​(Element element)的文档:

添加一个表单控件元素到这个表单。

因此,在您的情况下,您必须在断言之前将以下行添加到代码中:

((FormElement) formElement).addElement(inputElement);

【讨论】:

在这种情况下,输入元素不会添加到 HTML 树中 @Vladimir 你是对的!固定。 只是想了解一下 FormElement 类需要哪些 elements 属性?为什么 formData() 方法不能只迭代 children()? 你将不得不问@JonathanHedley。 ^^

以上是关于Jsoup:将子 <input> 元素附加到 <foorm> 不会影响表单数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jsoup 选择一个没有类的 HTML 元素

请问用Jsoup如何解析一个已知name的元素的value值?

如何在 Jsoup 中生成匹配特定元素的 XPath 查询?

仅使用 Jsoup 从子节点中选择?

PHP DOM 将子元素附加到根

Jsoup在极少数情况下无法解析元素