Java JSoup解析表单,选中复选框并选择input

Java JSoup解析表单,选中复选框并选择input,java,checkbox,jsoup,Java,Checkbox,Jsoup,我有一个表单,我必须用jsoup阅读,它包含几个字段,包括复选框和组合框(选择输入) 我正在用以下代码读取这些值- Element campaignForm = doc.getElementById("Campaign"); Elements allInputFields = campaignForm.getElementsByTag("input"); Elements allSelections = campaignForm.getElemen

我有一个表单,我必须用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"));
                }
            }
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"));
    }
元素活动表单=doc.getElementById(“活动”);
Elements allInputFields=ActivityForm.getElementsByTag(“输入”);
Elements allSelections=ActivityForm.getElementsByTag(“选择”);
Map postData=newhashmap();
用于(元素选择字段:所有选择){
postData.put(selectField.attr(“名称”),selectField.attr(“值”);
}
for(元素输入字段:allInputFields){
if(inputField.attr(“type”).equalsIgnoreCase(“复选框”)){
postData.put(inputField.attr(“name”)、inputField.attr(“checked”).equalsIgnoreCase(“checked”)?“1”:“0”);
}否则{
postData.put(inputField.attr(“名称”),inputField.attr(“值”);
}
}
因此,当我打印postData映射时,它为文本输入字段提供了正确的值,但对于复选框和下拉列表(组合框),它不起作用。请让我知道是否有不同的方式来处理复选框和选择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"));
                }
            }
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"));
    }

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