所以,我从FIFA worldcup网站解析了HTML代码,想要获得所有匹配项:
wcup <- htmlTreeParse("http://www.fifa.com/worldcup/matches/", useInternalNodes=T)
然而,一个国家的领域是't-nText kern',而其他国家的领域是't-nText'。
<span class="t-nText kern">Bosnia and Herzegovina</span>
因此,如果我使用这个命令,我会想念'波斯尼亚和黑塞哥维那',就像这个命令:
xpathSApply(wcup, "//span[@class='t-nText ']", xmlValue)
那么,有什么方法可以同时搜索属性't-nText'和't-nText kern'?或者你还有其他解决方案吗?我希望保持匹配的顺序。
xpath不支持逻辑OR:
xpathSApply(wcup, "//span[@class='t-nText ' || 't-nText kern']", xmlValue)
XPath error : Invalid expression
//span[@class='t-nText ' || 't-nText kern']
^
XPath error : Invalid expression
//span[@class='t-nText ' || 't-nText kern']
^
Error in xpathApply.XMLInternalDocument(doc, path, fun, ..., namespaces = namespaces, :
error evaluating xpath expression //span[@class='t-nText ' || 't-nText kern']
答案 0 :(得分:4)
使用'或'或'start-with()',
wcup["//span[@class='t-nText kern' or @class='t-nText ']"]
wcup["//span[starts-with(@class, 't-nText ')]"]
答案 1 :(得分:2)
我最初发布这个,然后注意到需要订单,所以我搜索了SO“XPath OR”
为什么不直接将两个搜索的结果附加在一起:
c( xpathSApply(wcup, "//span[@class='t-nText kern']", xmlValue),
xpathSApply(wcup, "//span[@class='t-nText ']", xmlValue)
)
瞧,我想出来了:
xpathSApply(wcup, "//*[starts-with(@class,'t-nText')]", xmlValue)
这似乎与马丁摩根的解决方案类似。我没有意识到XPath是它自己的语言。猜猜我至少落后了10年。