html – r – xpathApply在XMLNodeSet上(带有XML包)

html – r – xpathApply在XMLNodeSet上(带有XML包),第1张

概述我试图在R中的 XML包中使用xpathApply函数从html文件中提取某些数据. 但是,在html文档的某些父节点上使用xpathApply后,生成的对象的类变为XMLNodeSet,我无法在此类对象上进一步使用xpathApply,因为出现此错误消息:“UseMethod(”xpathApply“)中的错误:没有适用于’xpathApply’的方法应用于类“XMLNodeSet”的对象“ 这 我试图在R中的 XML包中使用xpathApply函数从HTML文件中提取某些数据.
但是,在HTML文档的某些父节点上使用xpathApply后,生成的对象的类变为XMLNodeSet,我无法在此类对象上进一步使用xpathApply,因为出现此错误消息:“UseMethod(”xpathApply“)中的错误:没有适用于’xpathApply’的方法应用于类“XMLNodeSet”的对象“

这是我试图复制我的问题的R脚本(这个例子只是一个简单的表,我知道我可以使用readHTMLtable函数,但我需要使用更多的低级函数才能工作,因为我的实际HTML比这个简单更复杂表):

library(XML)y <- HTMLParse(HTMLfile)x <- xpathApply(y,"//table/tr")z <- xpathApply(x,"/td")

这是“HTMLfile”:

<table><tr><td> Test1.1 </td> <td> Test1.2 </td></tr><tr><td> Test1.3 </td> <td> Test1.4 </td></tr></table>

使用xpathApply后,是否有任何方法可以在节点上进一步工作?或者还有其他好的替代方案可以解决节点中的数据吗?

解决方法 获得节点列表后,可以对其应用函数以提取节点.函数如xmlValue或xmlGetAttr ….
例如 :

x <- xpathApply(y,"//table/tr")sapply(x,xmlValue)          ## it a List of nodes.. " Test1.1  Test1.2 " " Test1.3  Test1.4 "

这相当于:

xpathSApply(y,"//table/tr",xmlValue)" Test1.1  Test1.2 " " Test1.3  Test1.4 "

编辑

我确信您的问题可以通过正确的xpath解决.在处理数据库时,您应该学习使用xml文件. xpath与SQL查询类似.它很快,许多浏览器可以帮助您生成正确的xpath.

例如 :

xpathSApply(y,"//table/tr[2]/td[1]",xmlValue) #  second tr and first td [1] " Test1.3 " xpathSApply(y,"//table/tr[2]/td[3]",xmlValue) #  second tr and third td

编辑

OP看起来好像他想复制XML结构(以相同的顺序获得tr和td)

这是方式,我不认为是更有效的方式……

nn.trs <- length(xpathSApply(y,I))lapply(seq(nn.trs),function(i){       xpathSApply(y,paste("//table/tr[",i,"]/td",sep=''),xmlValue)})[[1]][1] " Test1.1 " " Test1.2 "[[2]][1] " Test1.3 " " Test1.4 "

如果每个tr中td的数量都相同,你可以用sapply替换lapply,你得到:

[,1]        [,2]       [1,] " Test1.1 " " Test1.3 "[2,] " Test1.2 " " Test1.4 "

但我认为在这种情况下readHTMLtable更好..

总结

以上是内存溢出为你收集整理的html – r – xpathApply在XMLNodeSet上(带有XML包)全部内容,希望文章能够帮你解决html – r – xpathApply在XMLNodeSet上(带有XML包)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1077369.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存