从特定代码

时间:2016-12-09 20:02:26

标签: java jsoup

假设我有一些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

中给出的相同

喜欢

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

姓氏......

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

我已经看过像.text()这样的方法,或者在jsoups中,但是它们给出了标签内的所有文本。我想要特定的文字。谢谢。

2 个答案:

答案 0 :(得分:0)

你应该使用标签。

<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对应的这些,但应该足够简单。

答案 1 :(得分:0)

要使用Java的内置DOM执行此操作,您可以执行以下操作:

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

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在评论中要求这样做。