我正在尝试解析通过亚马逊AWS提供的IRS 990表单文件。这是一个例子: https://s3.amazonaws.com/irs-form-990/201541349349307794_public.xml
我正在使用XML包读入并解析XML文档,如下所示:
require(XML)
x <- read_xml("https://s3.amazonaws.com/irs-form990/201541349349307794_public.xml")
data <- xmlParse(x)
xml_data <- xmlToList(data)
上面的代码完美地将XML转换为列表对象。现在我将它作为列表对象,我想获得第VII部分附表A Grp中列出的人员的所有名称和相关信息的列表。 XML文档的屏幕截图(名称已编辑):
如您所见,列出了几个名称(截图仅为示例)。但是,当我尝试按如下方式过滤R列表对象时:
xml_data$ReturnData$IRS990$Form990PartVIISectionAGrp
我只收到文档中第一个名称的信息。尽管它们的节点都在Form990PartVIISectionAGrp文档中列出,但其他所有节点都没有出现。
我在这里缺少什么?如何返回包含所有文档该部分中包含的名称和信息的对象?
非常感谢任何帮助!
答案 0 :(得分:0)
考虑直接解析数据帧,因为这些节点处于一致的级别。但是,您需要为文档中的默认命名空间映射用户定义的前缀 doc 。
library(XML)
data <- readLines("https://s3.amazonaws.com/irs-form-990/201541349349307794_public.xml")
doc <- xmlParse(data)
df <- xmlToDataFrame(nodes=getNodeSet(doc, "//doc:Form990PartVIISectionAGrp",
namespaces = c(doc="http://www.irs.gov/efile")))
<强>输出强>
df
# PersonNm TitleTxt AverageHoursPerWeekRt IndividualTrusteeOrDirectorInd ReportableCompFromOrgAmt ReportableCompFromRltdOrgAmt OtherCompensationAmt OfficerInd
# 1 ------- CHAIRMAN OF THE BOARD 16.00 X 0 0 0 <NA>
# 2 ------- ASSISTANT SECRETARY/BOARD 8.00 X 0 0 0 X
# 3 ------- BOARD MEMBER 8.00 X 0 0 0 <NA>
# 4 ------- SECRETARY/BOARD MEMBER 16.00 X 0 0 0 X
# 5 ------- BOARD MEMBER 8.00 X 0 0 0 <NA>
# 6 ------- CFO 16.00 <NA> 0 0 0 X
# 7 ------- PRESIDENT/CEO 40.00 <NA> 110886 0 0 X