Я читал аналогичный вопрос в этом посте здесь ( R dataframe из XML, когда значения многократные или отсутствуют
) но формат файла XML отличается от того, который у меня есть. Мой XML выглядит примерно так:
<?xml version="1.0" encoding="utf-8"?>
<users>
<row
Id="-1"
Body="Hello! I am a programmer!"
OwnerUserId="11111"
/>
<\users>
Первый из всех, это правильный XML или другой тип?
Второй , я попробовал все ответы в этом посте, и ни один из них не подходит для этого формата XML.
Третий , В этом случае, если некоторые строки не имеют, например, OwnerUserId
, как я могу эффективно проанализировать эти строки?
Я написал следующий код для этого, и мне интересно, есть ли эффективный и быстрый способ сделать это вместо чтения строк за строками?
posts <- xmlParse('path_to_file.xml')
xml_posts <- xmlToList(posts)
df_posts <- as.data.frame(matrix(ncol = 3))
df_posts <- df_posts[-1,]
colnames(df_posts) <- c(
"Id"
, "Text"
, "User_ID"
)
for(i in 1:length(xml_posts)){
user_id <- 'none'
xml_unlisted <- unlist(xml_posts[i])
name <- names(xml_unlisted)
if (length(xml_unlisted[name == "row.OwnerUserId"]) != 0){
user_id <- xml_unlisted[name == "row.OwnerUserId"]
}
df_temp <- data.frame(list(
xml_unlisted[name == "row.Id"]
,xml_unlisted[name == "row.Body"]
,user_id
))
colnames(df_temp) <- c(
"Id"
, "Text"
, "User_ID"
)
df_posts <- rbind(df_posts, df_temp)
}
head(df_posts)