Вот решение, основанное на этом вопросе / ответе: R XML - объединение родительских и дочерних узлов (с одинаковым именем) в фрейм данных
library(xml2)
library(dplyr)
page<-read_xml('
2
Cardiac/MM/Dimension/LVIDd
MM/LVIDd
Average
0.05617021151
2
Cardiac/MM/Dimension/LVIDd
MM/LVIDs
Measurement No. 1
0.05341702
')
rows<- page %>% xml_find_all('//row')
dfs<-lapply(rows, function(node){
#find the attr value from all child nodes
names<-node %>% xml_children() %>% xml_attr("name")
#find all values
values<-node %>% xml_children() %>% xml_text()
#create data frame and properly label the columns
df<-data.frame(t(values), stringsAsFactors = FALSE)
names(df)<-names
df
})
#bind together and add uid to final dataframe.
answer<-bind_rows(dfs)
answer
# indexpatient height ParameterMeasure ParameterId ResultIdentifier ResultValue
# 1 2 Cardiac/MM/Dimension/LVIDd MM/LVIDd Average 0.05617021151
# 2 2 Cardiac/MM/Dimension/LVIDd MM/LVIDs Measurement No. 1 0.05341702
>
Я далеко не эксперт по P / Invoke, но мне интересно, может ли помочь сделать это параметром in / out :
DllImport("marshall.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern void doIt([In, Out] RECORD[] dataRecord);
Я не ожидал бы , что это будет необходимо, хотя, как и в случае с LayoutKind.Sequential
, я надеюсь, что ваша структура уже является blittable-типом, и что массив будет слишком легкомысленным.