【问题标题】:JSoup parsing form with checkboxes and select inputJSoup 使用复选框解析表单并选择输入
【发布时间】:2015-03-04 15:19:28
【问题描述】:

我有一个必须用 jsoup 阅读的表单,它包含多个字段,包括复选框和组合框(选择输入)。

我正在使用以下代码读取那里的值 -

Element campaignForm = doc.getElementById("Campaign");
            Elements allInputFields = campaignForm.getElementsByTag("input");
            Elements allSelections = campaignForm.getElementsByTag("select");                               
            Map<String, String> postData = new HashMap<String, String>();
            for(Element selectField:allSelections){
                postData.put(selectField.attr("name"), selectField.attr("value"));
            }

            for(Element inputField:allInputFields){
                if(inputField.attr("type").equalsIgnoreCase("checkbox")){
                    postData.put(inputField.attr("name"), inputField.attr("checked").equalsIgnoreCase("checked")?"1":"0");
                }else{
                    postData.put(inputField.attr("name"), inputField.attr("value"));
                }
            }

因此,当我打印 postData Map 时,它会为文本输入字段提供正确的值,但对于复选框和下拉(组合框)它不起作用。请让我知道是否有不同的方式来处理复选框并在 jsoup 中选择输入。

编辑: 我在评论的帮助下工作的复选框,但选择输入仍然不起作用。

提前致谢。

【问题讨论】:

  • 复选框真的有值吗?合法问题,因为:&lt;input name="a" type="checked"&gt; 如果检查并提交,将生成一个参数 (a=on)。因此,有时不需要使用值。我认为这同样适用于选择选项。
  • 是否有任何简单的解决方案,或者我必须检查所有复选框状态是否选中/未选中,选择选项是什么意思,因为它们确实有值?不是吗?
  • 它们不需要有值属性。如果没有 value 属性,将使用内部文本。长话短说jsfiddle 你不能在那里真正运行这个例子,但它应该解释我的评论(答案;))。是的,您必须检查复选框元素上的选中属性。
  • 是的,Meistermeier,我的复选框工作了,但选择输入仍然不工作:(
  • 只是猜测:在选择案例中使用(选定)选项中的#text()。如果您需要更清晰的答案,您可以提供一些您正在解析的 html。

标签: java checkbox jsoup


【解决方案1】:

我得到了它使用以下代码 -

for(Element selectField:allSelections){
                String nameField = selectField.attr("name");
                String valueField = "";
                Elements allOptions = selectField.getElementsByTag("option");
                for(Element opt:allOptions){
                    if(opt.attr("selected").equalsIgnoreCase("selected")){
                        valueField = opt.attr("value");
                        break;
                    }
                }
                postData.put(nameField, valueField);                    
            }

            for(Element inputField:allInputFields){
                if(inputField.attr("type").equalsIgnoreCase("checkbox")){
                    postData.put(inputField.attr("name"), inputField.attr("checked").equalsIgnoreCase("checked")?"1":"0");
                }else{
postData.put(inputField.attr("name"), inputField.attr("value"));
    }

【讨论】:

  • 如果没有selected 属性,您可能希望使用第一个选项的值。
猜你喜欢
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 2012-12-17
  • 2013-12-05
  • 2021-08-08
  • 1970-01-01
相关资源
最近更新 更多