Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用xpathSApply在R中刮取XML属性_Xml_R_Xpath - Fatal编程技术网

使用xpathSApply在R中刮取XML属性

使用xpathSApply在R中刮取XML属性,xml,r,xpath,Xml,R,Xpath,我正在使用xpathSApply(在XML包中)在R中抓取XML,但在提取属性时遇到了问题 首先,一个相关的XML片段: <div class="offer-name"> <a href="http://www.somesite.com" itemprop="name">Fancy Product</a> </div> 我已使用以下工具成功推出了“花式产品”(即元素?): 产品href是一个属性。您可以选择适当的

我正在使用xpathSApply(在XML包中)在R中抓取XML,但在提取属性时遇到了问题

首先,一个相关的XML片段:

 <div class="offer-name">
        <a href="http://www.somesite.com" itemprop="name">Fancy Product</a>
      </div>

我已使用以下工具成功推出了“花式产品”(即元素?):


产品href
是一个属性。您可以选择适当的节点
//div/a
,并使用
xmlGetAttr
函数和
name=href

'<div class="offer-name">
  <a href="http://www.somesite.com" itemprop="name">Fancy Product</a>
  </div>' -> xData
library(XML)
parsedHTML <- xmlParse(xData)
Products <- xpathSApply(parsedHTML, "//div[@class='offer-name']", xmlValue) 
hrefs <- xpathSApply(parsedHTML, "//div/a", xmlGetAttr, 'href')
> hrefs
[1] "http://www.somesite.com"
'
'->扩展数据
库(XML)

parsedHTML您也可以直接使用XPath来完成这项工作,而不必使用
xpathsaply(…)


xData-XML-syntactive-sugar+1这也很有效,在其他情况下可能是更好的解决方案,尽管我发现在URL中包含了“href”,使其效果稍差。URL中没有包含href!这将返回一个命名向量。”href'是名称。很公平-我错了,我还是新手,在使用cbind()组合所需数据时,得到了一个额外的列。感谢您的帮助。我在一个包含20000个要提取的数字数据的大文件上对其进行了基准测试,使用
xpathApply
的版本速度慢了9倍。这非常有效。我选择这个答案而不是jlhoward,因为它是我使用的格式(并不意味着它对所有用户都更好),并且输出的hrefs可以很容易地作为一个列进行cbind。jlhoward的响应生成了一个cbind为2列的对象(其中一列是all href),因此需要做更多的工作。如果我有这个名声,我会+1。
library(XML)
library(httr)

content2 = paste(readLines(file.choose()), collapse = "\n") # User will select file.
parsedHTML = htmlParse(content2,asText=TRUE)

Products <- xpathSApply(parsedHTML, "//div[@class='offer-name']", xmlValue) 
'<div class="offer-name">
  <a href="http://www.somesite.com" itemprop="name">Fancy Product</a>
  </div>' -> xData
library(XML)
parsedHTML <- xmlParse(xData)
Products <- xpathSApply(parsedHTML, "//div[@class='offer-name']", xmlValue) 
hrefs <- xpathSApply(parsedHTML, "//div/a", xmlGetAttr, 'href')
> hrefs
[1] "http://www.somesite.com"
xData <- '<div class="offer-name">
  <a href="http://www.somesite.com" itemprop="name">Fancy Product</a>
  </div>'
library(XML)
parsedHTML <- xmlParse(xData)
hrefs <- unlist(parsedHTML["//div[@class='offer-name']/a/@href"])
hrefs
#                      href 
# "http://www.somesite.com"