xml - R & XML2 : Replace missing XML elements with NA

标签 xml r xpath

我正在使用 XML2 从在线 XML 文档中提取发布数据,例如 this一,使用此代码:

xF <- read_xml(target, encoding = "UTF-8")   ## target = above link

获取每个发布节点存在的项目没有问题。

Titles <- xml_text(xml_find_all(xF, "//publication-base_uk:title", xml_ns(xF)))
Pub.Lang <- xml_text(xml_find_all(xF, "//publication-base_uk:language/core:term/core:localizedString", xml_ns(xF)))
## etc...

但是,我对如何获取并不总是有条目的项目感到困惑,例如同行评审标签。

Peer.Rev <- xml_text(xml_find_all(xF, "//extensions-core:peerReviewed", xml_ns(xF)))

为所有具有 peerReviewed 子标签的出版物返回一个值,但由于某些 peerReviewed 标签没有子标签,因此计数已关闭。有没有办法用 NA(或其他任何东西)代替缺失的文本值?

提前致谢。

最佳答案

使用 xml2::xml_find_first() 应该可以得到你想要的。

示例:

假设我们想要来自此 xml rss 提要的博客文章类别: https://eagereyes.org/feed .其中一些帖子只有一个类别,有些则不止一个。搜索一个就可以了:

feed <- "https://eagereyes.org/feed"
doc <- httr::GET(feed) %>% xml2::read_xml()
channel <- xml2::xml_find_all(doc, "channel")
site <- xml2::xml_find_all(channel, "item")

categories <- tibble::tibble(
    category1 = xml2::xml_text(xml2::xml_find_all(site, "category[1]"))
  )

> categories
# A tibble: 10 x 1
       category1
           <chr>
 1        Papers
 2     Blog 2017
 3         Links
 4     Blog 2017
 5     Blog 2017
 6          Talk
 7 ISOTYPE Books
 8    Techniques
 9        Basics
10     Blog 2017

但是多次尝试这样做不会:

categories <- tibble::tibble(
    category1 = xml2::xml_text(xml2::xml_find_all(site, "category[1]")),
    category2 = xml2::xml_text(xml2::xml_find_all(site, "category[2]"))
  )

Error: Column `category2` must be length 1 or 10, not 3

xml_find_first 拯救:

categories <- tibble::tibble(
    category1 = xml2::xml_text(xml2::xml_find_first(site, "category[1]")),
    category2 = xml2::xml_text(xml2::xml_find_first(site, "category[2]"))
  )
> categories
# A tibble: 10 x 2
       category1  category2
           <chr>      <chr>
 1        Papers      paper
 2     Blog 2017 conference
 3         Links       <NA>
 4     Blog 2017       <NA>
 5     Blog 2017       <NA>
 6          Talk       <NA>
 7 ISOTYPE Books    isotype
 8    Techniques       <NA>
 9        Basics       <NA>
10     Blog 2017       <NA>

希望对您有所帮助。

关于xml - R & XML2 : Replace missing XML elements with NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33933030/

相关文章:

python - 如何创建具有动态高度的纸质记录?

javascript - 在 Odoo ERP 系统上创建自定义字段小部件

r - 障碍模型预测 - 计数与响应

r - 如何可视化 tm 的 findAssocs() 结果

r - 有没有办法为数据表绘制 UMAP 或 t-SNE 图?

java - 突出显示 XPath 覆盖的节点

java - 将 Java 变量添加到 xpath

python - XPATH - 如何从 <br> 标签中获取内部 html 数据?

php - 有什么更好的 : Json or XML (PHP)

xml - XSLT 默认替换标签值