【问题标题】:Get text from specific tags从特定标签获取文本
【发布时间】:2016-12-09 20:02:25
【问题描述】:

假设我有一些 html 表单。

<form action="action_page.php">
  First name:<br>
  <input type="text" name="fistname" value="Mickey" />
  <br>
  Last name:<br>
  <input type="text" name="lastname" value="Mouse" />
  <br><br>
  <input type="submit" value="Submit">
</form>

我想打印与https://www.tutorialspoint.com/html/html_input_tag.htm中相同的内容

喜欢

名字 : .........

姓......

我能够获取输入值。我所需要的只是一种读取这个名字姓氏文本的方法(即输入标签之前的文本)。

我在 jsoups 中看到过 .text() 或 else 之类的方法,但它们提供了标签内的所有文本。我想要具体的文字。谢谢。

【问题讨论】:

  • 你能不能把“名字:”放在一个“

    ”标签中并给它一个id,或者HTML的内容不在你的控制范围内?

  • 我觉得很难
  • html 也不在我的控制范围内。它可以是任何格式。
  • 抱歉,由于我缺乏 JSoup 的经验,我无法为您提供帮助。有什么理由特别说明为什么您不使用 Java 的内置 DOM 解析器?
  • 不需要道歉。我们都会在某个时候到达那里。我已经在 jsoup 中完成了大部分代码。如果你能告诉我如何在 DOM 中做到这一点,那么我可以处理剩下的吗??

标签: java jsoup


【解决方案1】:

要使用 Java 的内置 DOM 做到这一点,您可以执行以下操作:

此代码将查找文档中所有带有input 标记的元素的第一个文本节点。您可以使用Element#getAttribute 来检查输入元素是否是实际的文本输入字段而不是提交按钮。

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new FileInputStream("doc.xml"));//Load document from any InputSource or InputStream
//Loop through all nodes with the input tag:
NodeList nl = document.getElementsByTagName("input");
for(int i = 0; i < nl.getLength(); i++){
    Node n = nl.item(i);
    if(n.getNodeType() != Node.ELEMENT_NODE)
        continue;
    Element e = (Element)n;
    Node previous = e;
    //Loop through all nodes before the input element:
    while((previous = previous.getPreviousSibling()) != null){
        if(previous.getNodeType() == Node.TEXT_NODE && previous.getTextContent().replaceAll("\\s+", "").length() > 0){
            System.out.println(previous.getTextContent().trim()); //Remove whitepsace from beginning and end of the text.
            break; //Break after finding the first text element of appropriate length.
        }
    }
}

虽然我对 JSoup 一无所知,但我认为您可以像在上面的代码中一样访问以前的元素。

给读者的一般说明

我使用的是 DOM 而不是 JSoup,请注意 OP 在 cmets 中要求这样做。

【讨论】:

  • 这也适用于 html 吗?我不知道 DOM,但我的印象是它主要用于 xml
  • @PraveenRana 它确实适用于 HTML,因为它本质上是 XML。但是,DOM 有非常严格的格式规则,因此不会接受任何格式错误的文档,例如未闭合的标签。
  • html 中没有 这就是它不解析的原因
  • 谢谢。但我不得不使用 tidy 将 html 转换为 xml。然后使用你的代码。现在它可以工作了。我得到了我想要的。再次感谢您与我联系。
  • @PraveenRana 很高兴我能提供帮助。
【解决方案2】:

你应该使用标签。

<form action="action_page.php">
    <label for="fname">First name</label>
    <input type="text" name="fistname" id='fname' value="Mickey" />
    <br>
    <label for="lname">Last name</label>
    <input type="text" name="lastname" id='lname' value="Mouse" />
    <br><br>
    <input type="submit" value="Submit">
</form>

然后您可以获得标签值: $('label[for="'+ this.id +'"]').text()

另一种选择是使用数据属性:

<input type="text" name="lastname" data-descriptor="Last Name" value="mouse"/>

你可以得到如下值: $(this).data('descriptor')

我不知道这些的非 jquery 对应物,但应该足够简单。

【讨论】:

  • 我正在从 url 读取数据。并且可以有更多的标签。我不需要包含所有标签。
  • 哦,就像您从 url 获取 html 并想要解析它一样?
  • 我正在尝试创建类似 fpdf.org 的内容。我必须从 html url 读取数据。使用java将其转换为php变量格式。并将所有这些写入一个 pdf 文件。
猜你喜欢
  • 2023-03-10
  • 2019-07-18
  • 2018-09-25
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多