首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JSoup中按名称查找字符串值

在JSoup中按名称查找字符串值
EN

Stack Overflow用户
提问于 2012-12-12 21:22:06
回答 1查看 4.1K关注 0票数 2

所以,我在JSoup中遇到了一个问题。

我需要解析一个HTML页面以获得一些表单输入值,如下所示:

代码语言:javascript
复制
<input value="210cf5f0c2db3ac6ac5112881525cfff" data-value="1355317682" type="hidden" name="token" />
<input type="hidden" name="sid" value="18c03bc9nkedyyjmbzgvmkv5tx7yhyw1" />
<input value="" name="redirect" type="hidden" />
<input value="d3edfe5b37608758516833b858b51b63" type="hidden" name="eyhy7xt5v" /> 

我需要能够获取这些输入中每一个的值,但一次只能获取一个。我当前的Java代码如下所示:

代码语言:javascript
复制
import org.jsoup.Jsoup;
import org.jsoup.helper.Validate;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;

class JSoupTest {
    public static void main(String[] args) throws IOException {
        Document doc = Jsoup.connect("http://url.com/auth").get();
        Elements inputs = doc.select("input");
        for(Element input : inputs) {
            System.out.println(input.attr("name"));
            System.out.println(input.attr("value"));
        }
    }
}

它当前转储所有输入的名称和它们的值,但我需要程序只输出某个输入字段的值。

比如,假设我想输出名为"sid“的输入字段的值。我只需要打印这个值,其他值都不需要。

我只需要以某种方式做选择性打印,我想你可以说。只需打印某个输入字段的值。

有人知道怎么做吗?

在JSoup文档中,我一直在查找this page,但是我找不到我想要的东西。

谢谢!

编辑:我刚刚意识到,每次刷新页面时,最后一个值的名称都是随机生成的。如果它除了“隐藏”特征之外没有任何保持不变的值,有什么方法可以获取它吗?

EN

回答 1

Stack Overflow用户

发布于 2012-12-15 03:21:52

如果我理解正确的话,下面的代码可以做你想要的事情:

代码语言:javascript
复制
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class MyParser {
    public static void main(String args[]) {
        String inputText = 
            "<input value=\"210cf5f0c2db3ac6ac5112881525cfff\" data-value=\"1355317682\" type=\"hidden\" name=\"token\" />"
            + "<input type=\"hidden\" name=\"sid\" value=\"18c03bc9nkedyyjmbzgvmkv5tx7yhyw1\" />"
            + "<input value=\"\" name=\"redirect\" type=\"hidden\" />"
            + "<input value=\"d3edfe5b37608758516833b858b51b63\" type=\"hidden\" name=\"eyhy7xt5v\" />" ;
        Document doc = Jsoup.parseBodyFragment(inputText);
        Element body = doc.body();
        // Grab the value attribute of the INPUT element with a given name attribute
        Element input = body.select("input[name=sid]").first();
        System.out.println(input.attr("value"));
        // Grab the value attribute of the last INPUT element
        Element lastInput = body.select("input").last();
        System.out.println(lastInput.attr("value"));
    }
}

您可以使用以下语法为name属性选择具有给定值的input元素:

代码语言:javascript
复制
element.select("tag_name[attr_name=value]")

这将返回一个只包含一个元素的Elements对象(因为name属性的值是惟一的)。

您说过,具有不断变化的name属性的input元素是最后一个input,因此您可以通过获取包含所有input元素的Elements对象并获取这些元素中的最后一个元素来利用这一知识。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13840774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档