使用r在不同数据中提取xml中的多个条目(代码片段)

author author     2022-12-29     108

关键词:

我有一组XML文件正在阅读,并想知道处理以下内容的最佳方法:

<MyDecision>
    <Decision>
        <DecisionID>X1234</DecisionID>
        <DecisionReasons xmlns:a="http://schemas.datacontract.org/2004/07/Contracts">
            <a:Reason>
                <a:Description>DOBMismatch</a:Description>
            </a:Reason>
            <a:Reason>
                <a:Description>PrimaryChecksFail</a:Description>
            </a:Reason>
            <a:Reason>
                <a:Description>IncomeReferral</a:Description>
            </a:Reason>
        </DecisionReasons>
    </Decision>
</MyDecision>

目前,我正在运行一些R代码但得到响应:

Error: Duplicate identifiers for rows (2, 3, 4)

预期的输出是一个类似于以下内容的数据框:

fieldname                                                                   |contents
MyDecision_Decision_DecisionID                                              |X1234
MyDecision_Decision_DecisionReasons_Reason_Description_DOBMismatch          |DOBMismatch
MyDecision_Decision_DecisionReasons_Reason_Description_PrimaryChecksFail    |PrimaryChecksFail
MyDecision_Decision_DecisionReasons_Reason_Description_IncomeReferral       |IncomeReferral

我目前的代码如下:

library(profvis)
library(XML)
library(xml2)
library(plyr)
library(tidyverse)
library(reshape2)
library(foreign)
library(rio)

setwd('c:/temp/xml/t')

df             <- data.frame()
transposed.df1 <- data.frame()
allxmldata     <- data.frame()


inputfiles <- as.character('test.xml')

findchildren<-function(nodes, df) 
  numchild <- sapply(nodes, function(x)length(xml_children(x)))
  xmlvalue <- xml_text(nodes[numchild==0])
  xmlname  <- xml_name(nodes[numchild==0])
  xmlpath  <- sapply(nodes[numchild==0], function(x) gsub(', ','_', toString(rev(xml_name(xml_parents(x))))))
  if (isTRUE(xmlpath == 'MyDecision_Decision_DecisionReasons_Reason')) 
    fieldname <- paste(xmlpath,xmlname,xmlvalue,sep = '_')
   else 
    fieldname <- paste(xmlpath,xmlname,sep = '_')
  
  contents <- sapply(xmlvalue, function(f)is.na(f)<-which(f == '');f)
  dftemp   <- data.frame(fieldname, contents)
  df       <- rbind(df, dftemp)
  print(dim(df))
  if (sum(numchild)>0)
    findchildren(xml_children(nodes[numchild>0]), df) 
  else return(df)


for (x in inputfiles) 
  df1     <- findchildren(xml_children(read_xml(x)),df)
  xml.df1 <- data.frame(spread(df1, key = fieldname, value = contents), fix.empty.names = TRUE)
  allxmldata <- rbind.fill(allxmldata,xml.df1)

我希望有人可以指出我做错了什么......

答案

我提出了以下适用于您的示例数据集的解决方案。希望这种方法也可以用于更大的数据集。

# we need these two packages
library(xml2)
library(tidyverse)

# read in the xml-file
xml <- read_xml(
  '<MyDecision>
    <Decision>
      <DecisionID>X1234</DecisionID>
      <DecisionReasons xmlns:a="http://schemas.datacontract.org/2004/07/Contracts">
        <a:Reason>
          <a:Description>DOBMismatch</a:Description>
        </a:Reason>
        <a:Reason>
          <a:Description>PrimaryChecksFail</a:Description>
        </a:Reason>
        <a:Reason>
          <a:Description>IncomeReferral</a:Description>
        </a:Reason>
      </DecisionReasons>
  </Decision>
  </MyDecision>'
)

xml %>% 
  # first find all nodes that doesn't contain any child nodes
  xml_find_all(".//node()[not(node())]") %>% 
  # find the parent of each node
  map(xml_parent) %>% 
  # extract name and text of each of the childless nodes
  map(~list(name = xml_name(.x), text = xml_text(.x))) %>% 
  # bind rows.
  bind_rows()

这会产生以下输出:

# A tibble: 4 x 2
         name              text
        <chr>             <chr>
1  DecisionID             X1234
2 Description       DOBMismatch
3 Description PrimaryChecksFail
4 Description    IncomeReferral

使用python脚本删除sql数据库中的多个条目(代码片段)

...留我给出的函数的输入结构,因为它在其他同事的代码中使用。我提出了一个解决方案,可以完成类似于下面提到的工作。我故意避免使用任何类型的executemany()方法,因为(如果我没有记错的话),它们可能非常慢。importsqlalche... 查看详情

是否可以在列表框中的一行中添加多个条目?(代码片段)

...否可以在列表框中的同一行上包含所有条目我知道如果我使用一个输入框,一切都会在一行上fromtkinterimport*fromtkinterimportmessageboxdefadd_task():task=name_input.get()start_dte=start_date_input.get()due_dte=due_d 查看详情

java示例代码_使用commons digester如何将单个xml条目解析为对象中的多个字段

java示例代码_使用commons digester如何将单个xml条目解析为对象中的多个字段 查看详情

从R中的原始文件中提取数据

...ileinR【发布时间】:2017-09-1510:34:51【问题描述】:我需要使用R从原始文件中提取数据。之前有一些无用的数据,实际表从第100行开始。现在可以使用read.csv(skip=99)从该行读取数据但我想通过自动从该行开始读取来使其动态化,因... 查看详情

爬虫进阶数据提取概述篇(巩固加强)(代码片段)

...应内容中的一部分数据结构化的响应内容json字符串可以使用 查看详情

xml停止覆盖/保存多个条目(代码片段)

当前我正在使用此代码创建XML文件XmlSerializersr=newXmlSerializer(obj.GetType());TextWriterwriter=newStreamWriter(filename);sr.Serialize(writer,obj);writer.Close();问题是,它总是会覆盖我之前所做的输入。我如何进行多个输入并保存(在Combobox/DropDown 查看详情

如何使用python从不存在子根的xml数据中提取数据?(代码片段)

存在3个对象,每个对象的属性数量不同。如何在数据框中刮擦其每个属性?<movie>'ABC'</movie><metaname="actor"content="Joseph"></meta><metaname="actor_ATTR"content="Male"></meta><metaname="actor_ATTR" 查看详情

在一个查询中从多个主键中提取条目

...equery【发布时间】:2017-08-1016:48:49【问题描述】:我正在使用spark-cassandra-connector(最新版本,我认为是2.0.3)将数据从Cassandra(3.10)提取到Spark2。我想知道是否有一种方法可以在一个查询中从多个主键中提取。PK是原子的(只有一... 查看详情

如何根据多个by-record标准从data.table中提取特定字段?(代码片段)

使用q的data.table包,我希望能够根据多个标准提取特定记录。实际上,我正在处理一个包含数百万或数千万条记录的表,并且我想提取给定字段的倒数第二个条目,以获得在该字段中终止0个条目的记录。我可以确定哪些记录是感... 查看详情

编辑目录中的xml文件(代码片段)

我正在尝试使用python脚本编辑文件夹的不同目录中的多个config.xml文件。我正在寻找特定的标签值,然后用新值更改它。我创建了一个数组,并使用ElementTreeapi。importosimportxml.etree.ElementTreeasETd1=r'/home/user/temp/a/'d2=r'/home/user/temp/b/'d3=... 查看详情

r-使用不同数据框架中的日期,检查日期范围是否包含某个值。(代码片段)

我正在做一个项目,分析信用卡公司的利率随时间的变化,以及同期常见信用卡公司的推特。目标是看我们是否能根据信用卡公司的推特账号来预测他们何时会改变利率。我有两个数据框架:1)如果利率在某个日期发生了变化[r... 查看详情

第三次作业(代码片段)

...、都可以对指针或结构中的数据进行引用等。但也有一些不同,主要的区别是存储数据的类型。虽然都可以存储多个数据但是数组中存储的数据类型是一样的,及定义的类型。结构中的数据可以是不同的类型。结构体和数组的引... 查看详情

视图的概述(代码片段)

...数据数据存放在视图所引用的原始表中,一个原始表根据不同用户的不同需求,可以创建N多个不同的视图 查询与视图有哪些异同点:不同点:存储上:视图存储在数据库中,查询以.sql文件形式保存。 排序上:要排序必... 查看详情

sql-需要在单个表中标识多个组中的最新条目(代码片段)

...try,但我很挣扎,因为我在结果集中需要更多关于表格的数据。我们围绕几组产品创建规则,我们需要为每个CLASS_ID拉出最新规则。最新消息,我指的是最新的entry_id。ENTRY_ID....TIMESTAMP....USER_ID........类标识码PRICE_POINT1...........3/2/2... 查看详情

如何使用 R 而不是整个数据表更改 excel 文件中的单个条目?

】如何使用R而不是整个数据表更改excel文件中的单个条目?【英文标题】:HowcanyouchangesingleentriesinanexcelfilewithRandnottheentiredatasheet?【发布时间】:2020-03-1501:58:08【问题描述】:我有一个包含一些数据的excel文件。我想使用R在所述... 查看详情

如何从不同的表条目中提取信息:Text vs. DIV vs. SPAN

】如何从不同的表条目中提取信息:Textvs.DIVvs.SPAN【英文标题】:Howtoextractinfofromvaryingtableentries:Textvs.DIVvs.SPAN【发布时间】:2015-06-1814:43:21【问题描述】:我是python新手,在网上搜索了我的问题的答案,但到目前为止我失败了....... 查看详情

使用rvest在页面中提取多个表(代码片段)

如何将所有列表转换为数据帧,附加所有数据帧并导出到csv?library(rvest)webpage<-read_html("https://www.sec.gov/Archives/edgar/data/21665/000144530512000409/exhibit21.htm")tbls<-html_nodes(webpage,"table")tbls_ls<-html_t 查看详情

r从多个向量中提取集合。(代码片段)

查看详情