2017-06-28 81 views
0

我想从XML文档中提取数据与XML包。 我去如下:R从XMLNodeSet提取数据

library(XML) 
sink("parse.txt") 
parse<-htmlParse(file = "jdwaz.html",encoding = "GBK") 
a=getNodeSet(parse,'//div[@class="amount"]') 
print(a) 

那么类(一)返回 “XMLNodeSet”,它的内容是这样的txt文件

[[1]] 
<div class="amount"> 
        <span>总额 ¥113.80</span> <br /><span class="ftx-13">在线支付</span> 
            </div> 

[[2]] 
<div class="amount"> 
        <span>总额 ¥99.00</span> <br /><span class="ftx-13">在线支付</span> 
            </div> 

我只显示 “一”

class(a [1])返回“list” 我想获得内容“总额¥99.00”。 我找到了一个方法r - xpathApply on XMLNodeSet (with XML package) 它使用xmlvalue得到像文本:

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

,但它不适合我的情况。 当我进入xmlvalue(A),它返回:

Error in UseMethod("xmlValue") : no applicable method for 'xmlValue' applied to an object of class "XMLNodeSet" 

我没有找到合适的方法来处理XMLNodeSet级。 帮助!

+0

@Zelbinian我发现你问的问题是有关我的问题,我不知道你是否能帮助我 – listen

回答

0

要查询XML节点集,请使用前导“。”。所以它相对于当前节点。既然你有两个span标签,那么得到没有class属性的标签。

sapply(a, function(x) xpathSApply(x, ".//span[not(@class)]", xmlValue)) #OR 
sapply(a, xpathSApply, ".//span[not(@class)]", xmlValue) 
[1] "总额 ¥113.80" "总额 ¥99.00" 
+0

非常感谢,我使用**/SPAN /文()**获得之间的内容一对标签。 现在我有一个新的问题,我使用xmlGetAttr获取内容<> 例如, 我想要的内容是**中文**,然后R用错误的词语返回内容。我想这是因为编码方式,但没有相关的设置inxmlGetAttr函数。伤心…。 – listen

+0

我发现** iconv **函数,它有助于编码问题! – listen