使用R语言xml2库删除HTML节点触发LOGICAL()类型错误如何解决?
报错原因与解决方案
这个报错属于参数传递操作错误导致,和xml2库本身无关。
xml2 1.3.2版本的xml_remove()函数设计为直接作用于待删除的节点对象,官方定义的参数规则如下:
- 第一个必填参数:待删除的单个xml节点或节点集
- 第二个可选参数:逻辑值
free,控制是否同时释放节点占用的内存,默认值为FALSE
你提交的代码xml_remove(x, ul)传参完全不符合规则:将根节点x传入了待删除节点位,将实际要删除的ul节点传入了本该接收逻辑值的free参数位,因此触发了「要求逻辑值但传入了list类型」的类型不匹配报错。
正确可运行代码
library(xml2) html <- "<html> <ul> <li>foo</li> </ul> </html>" x <- read_html(html) ul <- xml_find_first(x, ".//ul") # 直接将待删除的ul节点作为唯一参数传入即可 xml_remove(ul) # 打印验证删除结果 print(x)
如果需要批量删除多个节点,直接把筛选得到的节点集作为参数传入xml_remove()即可,无需额外传入父节点对象。
内容的提问来源于stack exchange,提问作者Ott Toomet
相关产品推荐
相关产品推荐

