Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从postgresql上的表中提取R中的XML数据_R_Regex_Postgresql - Fatal编程技术网

从postgresql上的表中提取R中的XML数据

从postgresql上的表中提取R中的XML数据,r,regex,postgresql,R,Regex,Postgresql,我有一个关于postgresql的表,它有一个xml列和一个varchar/numeric列。当试图检索数据并将其保存到数据帧时,xml将转换为字符。让我们重新创建数据集: my_dataset <- data.frame(id = c(1,1,1,1,2,2,2,2,2), http_action = c("REQUEST","RESPONSE","REQUEST","RESPONSE","REQUEST","RESPONSE","REQ

我有一个关于postgresql的表,它有一个xml列和一个varchar/numeric列。当试图检索数据并将其保存到数据帧时,xml将转换为字符。让我们重新创建数据集:

my_dataset <- data.frame(id = c(1,1,1,1,2,2,2,2,2),
                         http_action = c("REQUEST","RESPONSE","REQUEST","RESPONSE","REQUEST","RESPONSE","REQUEST","RESPONSE","RESPONSE"),
                         http_data = c('"<?xml version="1.0" standalone="yes"?> <questions> <candidate> <lastname>GOMEZ</lastname> <name>BARNEY</name> </candidate> </questions>)"',
                                       '"<validating> <opnum>123</opnum> <q1>Daily activity?</q1> <a1>Drinking at Moes</a1></validating>"',
                                       '"<?xml version="1.0" standalone="yes"?> <questions> <option>1</option> </questions>"', 
                                       '"<validating> <code>XY936701</code> <date>12/03/2020</date> <time>19:07</time> <result>NONAUTHORIZED</result> <explanation>NON SUITABLE</explanation> </validating>"',
                                       '"<?xml version="1.0" standalone="yes"?> <questions> <candidate> <lastname>LEONARD</lastname> <name>LEN</name> </candidate> </questions>)"' ,
                                       '"<validating> <opnum>124</opnum> <q1>Daily activity?</q1> <a1>Work at Nuclear Power</a1></validating>"',
                                       '"<?xml version="1.0" standalone="yes"?> <questions> <option>1</option> </questions>"', 
                                       '"<validating> <code>XY936702</code> <date>15/03/2020</date> <time>16:12</time> <result>NONAUTHORIZED</result> <explanation>NON SUITABLE</explanation> </validating>"',
                                       '"<validating> <code>XY936702</code> <date>15/03/2020</date> <time>19:24</time> <result>AUTHORIZED</result> <explanation>SUITABLE</explanation> </validating>"'),
                         http_status = c(200,200,200,200,200,200,200,200,200),
                         stringsAsFactors = FALSE)
我收到以下警告:

In postgresqlExecStatement(conn, statement, ...) :
  RS-DBI driver warning: (unrecognized PostgreSQL field type xml (id:142) in column 4)
我可以在包含节点的行上使用字符串比较来提取信息,我尝试了以下方法:

my_dataset <- my_dataset %>% 
mutate(authorized = ifelse(str_extract(http_data,"<result>[w+]</result>")=="",NA,
                           ifelse(str_extract(http_data,"<result>[w+]</result>")=="NONAUTHORIZED",0,1)))
my_数据集%
mutate(authorized=ifelse(str_-extract(http_-data,“[w+]”)==”,NA,
ifelse(str_extract(http_数据,[w+])==“未授权”,0,1)))
因此,我得到了一个完整的NA列,这不是我所期望的。请你帮我回答这个问题好吗?我的意思是,也许我的正则表达式写得不好。而且,您知道是否可以直接从查询中提取这些信息吗?提前感谢您提供的帮助


关于

您的正则表达式有问题:它应该类似于
(\\w+)
。此外,仅获取组匹配项
str\u extract
是不够的。您可以对组使用
str\u match
。看看
str\u match


作为另一种解决方案,您可以使用XML解析器。

Hello@can,我开始弄清楚为什么我的正则表达式不起作用,它不会提取您建议的
(\\w+
)。有一个问题,如果该列为char,我如何使用xml解析器?作为一种快速而肮脏的方式,您可以这样做比较:
str\u extract(http\u data,“\\w+”)==“未授权”
。对于xml解析器,您可以查看文档或者这个链接:Hello@can,这种方式很好,但是您知道我是否可以只提取标记中的文本吗?使用
str_match
和我给出的第一个正则表达式
()
将实际需要的零件分组。使用
str_match
你可以看到组匹配。你好@can,谢谢,很有趣的是,每次我输入“一个xml”,我的Mac都建议写“一个xml”。