有没有办法将OR与html_attr()
一起使用?在此 MRE 中,我只需要具有"饮料"或"食物"属性的节点。
也就是说,有了以下数据,我想做一些类似mydata %>% html_nodes("mynode") %>% html_attr("drink" or "food" otherwise skip)
的事情,然后得到:
[1] "tea" "coffee" "egg" "toast"
> mydata
{xml_document}
<allitems>
[1] <mynode drink="tea"/>
[2] <mynode dessert="cookie"/>
[3] <mynode drink="coffee"/>
[4] <mynode spice="pepper"/>
[5] <mynode food="egg"/>
[6] <mynode food="toast"/>
我可以在不分别提取饮料和食物属性、组合载体和去除 NA 的情况下做到这一点吗?
我建议使用xml2
包,我相信这是rvest
依赖项。
通过强制HTML
package::htmltools
使可复制
a <- htmltools::HTML(
'<mynode drink="tea"/>
<mynode dessert="cookie"/>
<mynode drink="coffee"/>
<mynode spice="pepper"/>
<mynode food="egg"/>
<mynode food="toast"/>')
现在使用xpath
选择器,我们可以 提取具有属性或food
或drink
的所有节点 .
> read_html(a) %>% xml_find_all('//*[@food or @drink]')
{xml_nodeset (4)}
[1] <mynode drink="tea"></mynode>
[2] <mynode drink="coffee"></mynode>
[3] <mynode food="egg"></mynode>
[4] <mynode food="toast"></mynode>
要获取属性值,请执行以下操作:
> read_html(a) %>% xml_find_all('//*[@food or @drink]') %>%
xml_attrs() %>% unlist(use.names = FALSE)
[1] "tea" "coffee" "egg" "toast"