【问题标题】:<td> value is not returned using HtmlUnit<td> 值不使用 HtmlUnit 返回
【发布时间】:2012-06-17 12:00:27
【问题描述】:

当我尝试使用下面的代码时...返回的是 td 标记,而不是 td 标记的值。

List<?> byXPath = page2.getByXPath("//tr[@class='metadata odd']/td");
System.out.println(byXPath.get(0).toString());

例如:如果标签是

<td class='metadata odd'>Arun</td>

结果是

<td class='metadata odd'>

....我需要结果是 Arun。请帮忙

【问题讨论】:

  • 例如:如果标签是 Arun 结果是 .... 我需要结果成为阿伦。请帮忙
  • 以“/”结尾的路径是无效的 XPath 语法:除了错误消息之外什么都不应该返回。
  • @Michael:这是一个错误...我编辑了我的帖子

标签: xpath htmlunit


【解决方案1】:

试试这个:

DomText domText = (DomText) form.getFirstByXPath("//tr[@class='metadata odd']/td/text()");
System.out.println(domText.getTextContent());

编辑:

如果您想获取所有元素,只需使用getByXPath 而不是getFirstByXPath 获取它们。然后遍历返回的列表(在你的问题中没有必要,所以我没有添加)。

【讨论】:

  • 哇...知道了...但是我怎样才能循环到下一个 td 元素?
  • 如果我给 getByXPath 而不是 getFirstByXPath 它会引发错误。 nyarlathotep 的上述评论有效。谢谢大家:)
  • 是的,但这个答案只是给你第一个元素。我的回答是一样的,但不那么罗嗦:P 正如我在回答中告诉你的那样,你必须遍历返回 getByXPath 的LIST
【解决方案2】:

您要查找的实际上是td 标记的文本子节点的字符串表示,而不是您目前请求的td 元素本身的字符串表示。 使用稍微不同的 XPath 表达式直接引用文本子节点,如下所示:

List<?> byXPath = page2.getByXPath("//tr[@class='metadata odd']/td/text()");
DomText textNode = (DomText)(byXPath.get(0));
System.out.println(textNode.toString());

另见this question

【讨论】:

  • get(0)中没有类似getFirstChild的方法
  • 价值就在那里。当我调试代码并查找值时,原始值存在于inherited->data_中,但不确定如何从data_参数中获取该值
  • class com.gargoylesoftware.htmlunit.html.DomText 这是返回的类。但无法将其转换为 DOMMode...抱歉让这成为一个冗长的聊天。但我挣扎了 2 小时...
猜你喜欢
相关资源
最近更新 更多
热门标签