首页 > 解决方案 > 如何通过在 R 中解析 .xml 将字段数据提取为列表?

问题描述

我正在尝试创建一个数据框,其中包含从 xml 中提取的几个字段的值。我是 xml 文件的新手,不知道自己在做什么。

我已尝试按照此处发布的说明如何将 XML 解析为 R 数据框,但我无法使其正常工作。xml 的格式与 GENESET 中的许多其他字段(未显示)类似

<?xml version="1.0" encoding="ISO-8859-1"?>   
-< MSIGDB BUILD_DATE="Jul 12, 2018" VERSION="6.2" NAME="msigdb">
      < GENESET VALIDATION_DATASETS="" CATEGORY_CODE="C3"  EXACT_SOURCE="GOID: 00098" STANDARD_NAME="AAANWWTGC_UNKNOWN"/>

理想情况下,我希望数据框的每一列只是 GENESET 中每个字段的值列表(即第 1 列 = CATEGORY_CODE;第 2 列 = EXACT_SOURCE)。如果特定 GENESET 的字段为空白,我还希望数据框具有 N/A。

我已经厌倦了这个:

require(XML)
doc <- xmlParse("msigdb_v6.2.xml")
exactSource <- as.list(xml_data[["MSIGDB"]][["GENESET"]][["EXACT_SOURCE"]])

但 head(exactSource) 的输出是

list()

请帮忙

标签: rxmldataframerstudio

解决方案


由于您只需要属性值,因此请考虑未记录的, xmlAttrsToDataFrame, in XML

假设以下包含缺失节点和空属性的更完整的 XML 示例:

<?xml version="1.0" encoding="ISO-8859-1"?>   
<MSIGDB BUILD_DATE="Jul 12, 2018" VERSION="6.2" NAME="msigdb">
      <GENESET VALIDATION_DATASETS="" CATEGORY_CODE="C3"  EXACT_SOURCE="GOID: 00096"/>
      <GENESET VALIDATION_DATASETS="" EXACT_SOURCE="GOID: 00097" STANDARD_NAME="BBBNWWTGC_UNKNOWN"/>
      <GENESET VALIDATION_DATASETS="" CATEGORY_CODE="C5"  EXACT_SOURCE="GOID: 00098" STANDARD_NAME="CCCNWWTGC_UNKNOWN"/>
      <GENESET VALIDATION_DATASETS="" CATEGORY_CODE="C6"  EXACT_SOURCE="GOID: 00099" STANDARD_NAME=""/>
      <GENESET VALIDATION_DATASETS="" CATEGORY_CODE="C7" STANDARD_NAME="EEENWWTGC_UNKNOWN"/>
</MSIGDB>

R

library(XML)

doc <- xmlParse("msigdb_v6.2.xml")
geneset_df <- XML:::xmlAttrsToDataFrame(getNodeSet(doc, path='//GENESET'))

geneset_df

#   VALIDATION_DATASETS CATEGORY_CODE EXACT_SOURCE      STANDARD_NAME
# 1                                C3  GOID: 00096               <NA>
# 2                              <NA>  GOID: 00097  BBBNWWTGC_UNKNOWN
# 3                                C5  GOID: 00098  CCCNWWTGC_UNKNOWN
# 4                                C6  GOID: 00099                   
# 5                                C7         <NA>  EEENWWTGC_UNKNOWN

推荐阅读