使用id包按id和class解析HTML元素

geo*_*ory 2 r html-parsing

是否可以HTMLInternalDocument通过它们的idclass信息从对象中提取元素?例如让我们拿一个文件:

<!DOCTYPE html>
<html>
<head>
    <title>R XML test</title>
</head>
<body>
<div id="obj1">
    <p id="txt1">quidquid</p>
    <p id="txt2">Latine dictum</p>
</div>
<div class="mystuff">
    <p>sit altum</p>
    <p>videtur</p>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

并读入R如下:

require(XML)
file <- "C:/filepath/index.html"
datain <- htmlTreeParse(readLines(file), useInternalNodes = TRUE)
Run Code Online (Sandbox Code Playgroud)

我想提取元素id='txt2'和的内容class='mystuff'

我尝试了各种方法,但均未成功,它们似乎都遍历了繁琐的工作。是否有使用class / id的快捷方式?我有一个想法,它可能涉及先使用getNodeSet某个应用方法(例如xmlApplyxmlAttrs),然后再尝试使用任何方法。感谢任何指针。

ags*_*udy 5

尝试例如:

id_or_class_xp <- "//p[@id='txt2']//text() | //div[@class='mystuff']//text()"
xpathSApply( doc,id_or_class_xp,xmlValue)

[1] "Latine dictum" "\n    "        "sit altum"     "\n    "        "videtur"       "\n" 
Run Code Online (Sandbox Code Playgroud)

doc在哪里:

doc <- htmlParse('<!DOCTYPE html>
<html>
<head>
    <title>R XML test</title>
</head>
<body>
<div id="obj1">
    <p id="txt1">quidquid</p>
    <p id="txt2">Latine dictum</p>
</div>
<div class="mystuff">
    <p>sit altum</p>
    <p>videtur</p>
</div>
</body>
</html>',asText=T)
Run Code Online (Sandbox Code Playgroud)