希望通过此块获得$ 2.00的XPath:
private val HDFS_IMPL_KEY = "fs.hdfs.impl"
def loadConf(pathToConf: String): Config = {
val path = new Path(pathToConf)
val confFile = File.createTempFile(path.getName, "tmp")
confFile.deleteOnExit()
getFileSystemByUri(path.toUri).copyToLocalFile(path, new Path(confFile.getAbsolutePath))
ConfigFactory.load(ConfigFactory.parseFile(confFile))
}
def getFileSystemByUri(uri: URI) : FileSystem = {
val hdfsConf = new Configuration()
hdfsConf.set(HDFS_IMPL_KEY, classOf[org.apache.hadoop.hdfs.DistributedFileSystem].getName)
FileSystem.get(uri, hdfsConf)
}
我试过这些但无济于事
<td class="undefined" colspan="6">
<table class="history-bill-payments" cellspacing="0" cellpadding="0" border="0" align="center" width="99%">
<thead>
<tbody>
<tr>
<td valign="top">04/19/2016</td>
<td valign="top" style="text-align:right; height:">
$3.00
<br/>
$2.00
</td>
在Firefox中使用firepath我得到了这个XPath
的HTML /体/格[4] / DIV [2] / DIV / DIV / DIV / DIV /表/ tbody的/ TR [2] / TD /表/ tbody的/ TR / TD [2]
我能够得到$ 3.00的xpath
$I->CanSeeElement("//table[contains(tbody/tr[2]/td/table/tbody/tr/td[2]/following-sibling::br)]");
$I->CanSeeElement("//table[contains(tbody/tr[2]/td/table/tbody/tr/td[2]/preceding-sibling::br/text(),'$2.00')]");
$I->CanSeeElement("//table[contains(tbody/tr[2]/td/table/tbody/tr/td[2]/following-sibling::br/text(),'$2.00')]");
答案 0 :(得分:4)
在XPath 1.0中,给定一个节点集,select
t.team,
count(*) correctAnswers
from Teams t
left join TAnswers ta on ta.TeamID=t.ID
left join Answears a on a.ID=ta.AnswerID and a.Correct=1
group by t.team
只会评估集合中的第一个节点。这就是为什么您的初始XPath成功找到包含contains()
的文本节点,而不是包含'$3.00'
的文本节点。
与 $ 3.00 的xpath工作方式接近的XPath表达式如下:
'$2.00'
上面的XPath通过在单个文本节点上应用//table[tbody/tr[2]/td/table/tbody/tr/td[2]/text()[contains(.,'$2.00')]]
而不是一次传递多个文本节点来工作。
答案 1 :(得分:2)
td
从你的试验中看,你可以从字面上理解$2.00
,所以你可以使用这个XPath 2.0表达式来获得以td
结尾的$2.00
:< / p>
//td[ends-with(normalize-space(), '$2.00')]
请注意,浏览器通常不支持XPath 2.0,因此如果在浏览器中运行,请使用此XPath 1.0表达式,并且$2.00
内的任何位置都可以显示td
:
//td[contains(.,'$2.00')]
br
如果您不想按字面指定$2.00
,则必须声明其他一些不变约束。例如,此XPath将返回以br
开头的td
中包含的$3.00
后面的字符串:
normalize-space(//td[starts-with(normalize-space(),'$3.00')]/br/following::text())
答案 2 :(得分:1)
如果需要,只需添加表ID或任何其他特定定位器。
xpath=//table//tr/td[2]/text()[2]