Xml 解析<;br>;在a<;td>;R元素

Xml 解析<;br>;在a<;td>;R元素,xml,r,xpath,Xml,R,Xpath,我试图解析一些用R编写的非常不幸的html,但我遇到了一些障碍 表结构是这样的,我需要在单独字段中的两个字符串仅由一个标记分隔 <td align="left"valign="top"><font face="Arial" size="2">Frederick Henry Bay, Australia<br>Ansett ANA 但是这会删除br标记,并强制我使用str_split根据 “?您可以使用getChildrenStrings函数: ap

我试图解析一些用R编写的非常不幸的html,但我遇到了一些障碍

表结构是这样的,我需要在单独字段中的两个字符串仅由一个
标记分隔

<td  align="left"valign="top"><font face="Arial" size="2">Frederick Henry    Bay,  Australia<br>Ansett ANA
但是这会删除br标记,并强制我使用str_split根据

“?您可以使用
getChildrenStrings
函数:

appHtml <- '<td  align="left"valign="top"><font face="Arial" size="2">Frederick Henry    Bay,  Australia<br>Ansett ANA'
library(XML)
doc <- htmlParse(appHtml)
res <- doc["//td/font", fun = getChildrenStrings]

> res[[1]]
                                text                                   br                                 text 
"Frederick Henry    Bay,  Australia"                                   ""                         "Ansett ANA" 

> lapply(res, function(x) x[names(x) == "text"])
[[1]]
                                text                                 text 
"Frederick Henry    Bay,  Australia"                         "Ansett ANA" 

appHtml您可以使用
getChildrenStrings
函数:

appHtml <- '<td  align="left"valign="top"><font face="Arial" size="2">Frederick Henry    Bay,  Australia<br>Ansett ANA'
library(XML)
doc <- htmlParse(appHtml)
res <- doc["//td/font", fun = getChildrenStrings]

> res[[1]]
                                text                                   br                                 text 
"Frederick Henry    Bay,  Australia"                                   ""                         "Ansett ANA" 

> lapply(res, function(x) x[names(x) == "text"])
[[1]]
                                text                                 text 
"Frederick Henry    Bay,  Australia"                         "Ansett ANA" 
appHtml这个怎么样

test<-'<html><td  align="left"valign="top"><font face="Arial" size="2">Frederick Henry    Bay,  Australia<br>Ansett ANA</td><td  align="left"valign="top"><font face="Arial" size="2">Liverpool, England<br>Queen BRB</td></html>'

library(XML)
html.raw = htmlTreeParse(test,useInternal = TRUE)
xpathApply(html.raw, '//td', function(x)
    xpathSApply(x,".//text()", xmlValue)
)
请注意,每个td都被转换为列表中的一个元素,并且列表由两个向量组成。

这如何

test<-'<html><td  align="left"valign="top"><font face="Arial" size="2">Frederick Henry    Bay,  Australia<br>Ansett ANA</td><td  align="left"valign="top"><font face="Arial" size="2">Liverpool, England<br>Queen BRB</td></html>'

library(XML)
html.raw = htmlTreeParse(test,useInternal = TRUE)
xpathApply(html.raw, '//td', function(x)
    xpathSApply(x,".//text()", xmlValue)
)

请注意,每个td都被转换为列表中的一个元素,列表由两个长度向量组成。

您可以在

matrix(
  xpathSApply(doc, '//td//text()', xmlValue), 
  ncol = 2, byrow = T)
#      [,1]                                 [,2]        
# [1,] "Frederick Henry    Bay,  Australia" "Ansett ANA"

你可以试着在你的血管里做点什么

matrix(
  xpathSApply(doc, '//td//text()', xmlValue), 
  ncol = 2, byrow = T)
#      [,1]                                 [,2]        
# [1,] "Frederick Henry    Bay,  Australia" "Ansett ANA"

我想是这样的!我刚刚运行了一个快速测试,它似乎返回了我想要的结果。我有点不好意思承认我在这个问题上浪费了多少时间。可以将最后一条语句写成:
xpathApply(html.raw,//td',xpathSApply,.//text(),xmlValue)
我想可以了!我刚刚运行了一个快速测试,这似乎正好返回了我想要的结果。我有点不好意思承认我在这个问题上浪费了多少时间。可以将最后一条语句写成:
xpathApply(html.raw,//td',xpathSApply,“.//text()”,xmlValue)
谢谢!这也很有效。非常感谢谢谢!这也很有效。非常感谢