【问题标题】:(JSoup) How to compare user input and HTML to see the text exist or not(JSoup) 如何比较用户输入和 HTML 以查看文本是否存在
【发布时间】:2013-11-10 01:02:47
【问题描述】:

我希望我的程序能够使用 JSoup 找到 HTML 上的特定文本

例如,用户键入“ABC”并使用JSoup解析HTML元素以检查HTML代码中是否存在用户输入,如果不存在则返回错误消息。

我正在查找文本的标记位于下面这一行

<link rel="canonical" href="https://forum.lowyat.net/user/ABC"/>

对不起,如果我的问题不清楚。不明白的请多多指教。

【问题讨论】:

  • 你的场景我完全不清楚。您在谈论输入,但在示例中显示 &lt;link&gt;。请清除。
  • 我的问题是我有一个用户输入,例如“ABC”。我想要做的是找出页面上是否存在字符串“ABC”。我发现字符串“ABC”位于&lt;link rel="canonical" href="https://forum.lowyat.net/user/ABC"/&gt; 行。
  • 现在好多了。它不应该在某些标记属性中(例如在 href 值中)还是仅在文本中?
  • “标签属性”是什么意思?用户输入只是一个普通的字符串。
  • &lt;input&gt;, &lt;link&gt; 这些是标签。每个标签都可以有其属性,例如&lt;input type='hidden' name='my_val'&gt; - 这里typenameinput 标签的属性(准确地说是属性)。现在你想在哪里寻找匹配?在标签属性中,还是在文本内容中?

标签: java html-parsing jsoup


【解决方案1】:

好的,根据我们在 cmets 中的小聊天,我假设您正在寻找每个带有 href 属性的 tag 包含用户输入。为此,简单的单线猫就可以了。看看吧!

首先,您对 Selector API 文档中的这一行感兴趣:

[attr*=valContaining] 元素具有名为“attr”的属性和包含“valContaining”的值

好吧,让我们开始工作

Document doc=Jsoup.parse(somePage) // or connect or whatever. The point is that doc is of Document type.
Elements elements=doc.select(String.format("[href*=%s]",userInput));
if(elements.isEmpty()){
    //sorry, there was no such thing on a page
}else{
     // elements is the collection of all tags containing href attribute that contains provided user input
    //do something with those elements
}

那就太好了!

【讨论】:

    【解决方案2】:

    如果您只需要搜索那一种元素,您可以简单地遍历所有元素并检查 href 标记是否包含用户查询:

    Document doc = Jsoup.parse(YOUR_HTML_SOURCE);
    
    String userInput = "ABC";
    Elements imports = doc.select("link");
        for (Element e : imports) {
            if (link.tagName("href").toString().contains(userInput)) {
                System.out.println(link.toString()); // this element contains it
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-01
      相关资源
      最近更新 更多