2011-11-07 76 views
3

这是一个跟进a very similar question我已经问过,但这次我试图让xmlAttrs而不是xmlValue。所以我们可以说,我们有以下几点:如何使用xmlAttrs使xpathSApply输出长度节点的向量?

my.xml <- ' 
<tv> 
    <show> 
    <name>Star Trek TNG</name> 
    <rating>1.0</rating> 
    <a href="http://www.google.com">google</a> 
    </show> 
    <show> 
    <name>Doctor Who</name> 
    <a href="http://www.google.com">google</a> 
    </show> 
    <show> 
    <name>Babylon 5</name> 
    <rating>2.0</rating> 
    </show> 
</tv> 
' 
library(XML) 
doc <- xmlParse(my.xml) 
xpathSApply(doc, '/tv/show', function(x) xmlValue(xmlChildren(x)$a)) 
# [1] "google" "google" NA 

我宁愿输出为

# [1] "http://www.google.com" "http://www.google.com" NA 

但我不能弄清楚。我想这可能是这样,但我是一个错误的:

xpathSApply(doc, '/tv/show', function(x) xmlAttrs(xmlChildren(x)$a)) 
# Error in UseMethod("xmlAttrs", node) : 
# no applicable method for 'xmlAttrs' applied to an object of class "NULL" 

我已经得到最接近的是这样的:

xpathSApply(doc, '/tv/show', function(x) xmlChildren(x)$a) 
# [[1]] 
# <a href="http://wwww.google.com">google</a> 
# 
# [[2]] 
# <a href="http://wwww.google.com">google</a> 
# 
# [[3]] 
# NULL 

回答

5

几乎得到了它。由于xmlAttrs()在遇到NULL时给你提供了这个错误,所以你只需要自己处理NULL情况:

> xpathSApply(doc, '/tv/show', function(x) ifelse(is.null(xmlChildren(x)$a), NA, xmlAttrs(xmlChildren(x)$a, 'href'))) 
[1] "http://www.google.com" "http://www.google.com" NA 
相关问题