У меня есть таблица на postgresql, в которой есть столбец xml и столбцы varchar / figureri c. При попытке извлечь данные и сохранить их во фрейме данных 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)))
В результате я получаю полный столбец NA, что не соответствует ожиданиям. Пожалуйста, не могли бы вы помочь мне с этим вопросом? Я имею в виду, возможно, мое регулярное выражение не очень хорошо написано. И знаете ли вы, можно ли извлечь эту информацию непосредственно из запроса? Заранее благодарим за помощь, которую вы можете оказать.
С уважением