2017-09-06 21 views
2

昨日ログインが必要なウェブサイトを盗んだので、ページは以下のようなXML形式です。私は教師のいくつかが2つの部署に所属しているので、それを解析するのに問題がありました。最初の3行は必要ありません。私は、データフレームにそれを有効にする必要があります(またはリスト、JSON形式)xmlから情報を抽出する

マイコード:

ID <- xpathApply(xml, "//teacher[@id]") 
ID_unlist <- unlist(ID) 
matrix <- as.data.frame(matrix(ID_unlist),nrow= 2, byrow=TRUE) 

Error in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L, : 
    first argument must be atomic 

XML:

<result status="success"> 
    <code>1</code> 
    <note>success</note> 
    <teacherList> 
    <teacher id="D95"> 
     <name>Mary</name> 
     <department id="420"> 
     <name>Math</name> 
     </department> 
     <department id="421"> 
     <name>Statistics</name> 
     </department> 
    </teacher> 
    <teacher id="D73"> 
     <name>Adam</name> 
     <department id="412"> 
     <name>English</name> 
     </department> 
    </teacher> 
    </teacherList> 
</result> 

そして、私が期待される結果は次のようになります。

t_id  teacher  d_id department 
D95   Mary  420   Math 
D95   Mary  421 statistics 
D73   Adam  412  English 

答えて

2

おそらく最も効率的な方法ではなく、動作します。

require(XML) 
content_list <- XML::xmlToList(content) 
df<-as.data.frame (do.call(rbind, 
    lapply(content_list$teacherList, function(teacher) { 
     unname (do.call(cbind, list (teacher$.attrs, teacher$name, do.call(rbind, teacher[names(teacher) == "department"]))) ) 
    }) 
) 
) 
colnames(df)<-c("id","teacher","department","did") 


    id teacher department did 
1 D95 Mary  Math 420 
2 D95 Mary Statistics 421 
3 D73 Adam English 412 
関連する問題