我遇到了一个问题,其中xmlValue
剥离了我需要保留的<br />
标签(或转换为我可以strsplit
开启的其他角色。
以下是一个例子:
> f <- htmlParse(getForm("http://sites.target.com/site/en/spot/store_locator_popups.jsp", ajax="true", storeNumber=1889), asText=TRUE)
> xpathSApply(f, "//div[@class=\"sl_results_popup_address\"]", xmlValue)
[1] "1154 S Clark StChicago, IL 60605(312) 212-6300"
与它解析的HTML相对应:
<div class="sl_results_popup_address">
1154 S Clark St
<br/>
Chicago, IL 60605
<br/>
(312) 212-6300
</div>
我尝试了, recursive=FALSE
,但似乎没有帮助。
如果它们是<p>
和</p>
换行符,那么它会更容易,因为我可以单独抓取它们,但是<br/>
没有包装文本我真的不能去方向。希望只有一个选项来降低xmlValue
内的剥离级别(或者<br/>
s)在文档解析阶段被剥离了吗?)。
答案 0 :(得分:5)
两件事可能会有所帮助
app.data<-getForm("http://sites.target.com/site/en/spot/store_locator_popups.jsp", ajax="true", storeNumber=1889)
app.data<-gsub("<br>","\n",app.data)
f <- htmlParse(app.data, asText=TRUE)
out<-xpathSApply(f, "//div[@class=\"sl_results_popup_address\"]", xmlValue)
> xpathSApply(f, "//div[@class=\"sl_results_popup_address\"]", xmlValue)
[1] "1154 S Clark St\nChicago, IL 60605\n(312) 212-6300"
>
所以只需用其他内容替换br
代码或使用原始代码
> xpathSApply(f, "//div[@class=\"sl_results_popup_address\"]/text()", xmlValue)
[1] "1154 S Clark St" "Chicago, IL 60605" "(312) 212-6300"
>
如果你想保留标签
dum.fun<-function(x){if(xmlName(x)=="br"){"<br/>"}else{xmlValue(x)}}
xChild<-xpathSApply(f, "//div[@class=\"sl_results_popup_address\"]",xmlChildren)
lapply(xChild,dum.fun)
> unlist(lapply(xChild,dum.fun))
[1] "1154 S Clark St" "<br/>" "Chicago, IL 60605"
[4] "<br/>" "(312) 212-6300"
>