【问题标题】:xpathSApply returns empty but xmlValue gives the correct value using XML package in RxpathSApply 返回空,但 xmlValue 使用 R 中的 XML 包给出正确的值
【发布时间】:2020-07-31 15:52:53
【问题描述】:

最近,我想使用 R 和包 XML 解析 XML 文件。 从网站教程学习后,我可以在 XML 指定标签中获取我想要的值。 但是当我想解析我自己的 xml 文件时(文件在这里:https://drive.google.com/open?id=1yr0klZ0eChTAPmZpnlYL-hQ3-42Sply2)。我总是获取空列表(其实我想要PC-ID_id标签的值)。

library(XML)
xml = xmlParse('./100000.xml', useInternalNodes = TRUE)
xpathSApply(xml, '//PC-ID_id', xmlValue)
# list()

xmltop = xmlRoot(xml)
xmlValue(xmltop[['PC-AssaySubmit_assay']]
         [['PC-AssaySubmit_assay_descr']]
         [['PC-AssayDescription']]
         [['PC-AssayDescription_aid']]
         [['PC-ID']]
         [['PC-ID_id']]
)
# "100000"

你能帮我弄清楚使用 xpathSApply() 时返回空列表的原因吗?

谢谢。

【问题讨论】:

    标签: r xml


    【解决方案1】:

    问题可能是因为您的 XML 文档使用了默认命名空间。在创建 xpath 表达式时,您需要正确考虑这一点。

    较新的xml2 库可以更轻松地剥离默认命名空间。因此,例如,您可以这样做

    library(xml2)
    read_xml('./100000.xml') %>% 
      xml_ns_strip() %>% 
      xml_find_all("//PC-ID_id") %>% 
      xml_text
    # [1] "100000"
    

    如果您真的非常想使用XML 包,请查看this question 的可能答案

    【讨论】:

    • 非常感谢!第一次知道命名空间的问题。周末愉快。
    猜你喜欢
    • 2014-08-12
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多