2017-09-20 13 views
0

私はXMLに新しく、大きなファイルを扱うときはxmlEventParse()とgetNodeSet()をRで使用することをお勧めします。理由を知っている。おそらくパスの不適切な定義ですか?xmlEventParseは空のデータフレームを返します

元のファイルのように見えるダミーXMLファイルは、このリンクで見つけることができます: dummy xml file

そして、私のダミーのRコードはこのようです:

library(XML) 

FOOid_traverse <- function() { 

uids <- c() 
refs <- c() 

REC <- function(x) { 

uid <- xpathSApply(x, "//N8:EntityList/N8:Entity/N2:OrganisationName", 
xmlValue) 
ref <- xpathSApply(x, "//N8:EntityList/N8:Entity/N5:Identifiers/N5:Identifier/N5:IdentifierElement", xmlValue) 

if (length(uid) > 0) { 

    if (length(ref) == 0) { 

    uids <<- c(uids, uid) 
    refs <<- c(refs, NA_character_) 

    } else { 

    uids <<- c(uids, rep(uid, length(ref))) 
    refs <<- c(refs, ref) 

    } 

} 

} 


list(
REC = REC, 
FOOid_df = function() { 
    data.frame(uid = uids, ref = refs, stringsAsFactors = FALSE) 
} 

}

FOOid_f < - FOOid_traverse()

目に見えない( xmlEventParse( ファイル= path.expand( "companies_xml_extract_20170703.xml")、 支店= FOOid_f [ "REC"]) )

FOOid_f $ FOOid_df()

おかげ

+0

あなたはplsは平野言葉であなたの期待を説明することができますか? – Prem

+0

OrganisationNameとIdentifierElementを持つデータフレームに列ヘッダーが必要です。つまり、N8:EntityList/N8:EntityList/N5:OrganisationNameとN8:EntityList/N8:Entity/N5:Identifiers/N5:Identifier/N5:IdentifierElementパスに格納されているデータを抽出することになります。 – William

+0

Isn ' tmlは不完全ですか?あなたのポストでそれを修正する必要があるかもしれません。 – Prem

答えて

0

これが役立つことを願っています!

library(xml2) 
library(dplyr) 
xml_doc <- read_xml("test.xml") 

OrganisationName <- xml_doc %>% 
    xml_find_all("//N2:OrganisationName/N2:NameElement", ns=xml_ns(xml_doc)) %>% 
    xml_text() 
IdentifierElement <- xml_doc %>% 
    xml_find_all("//N5:Identifiers/N5:Identifier/N5:IdentifierElement", ns=xml_ns(xml_doc)) %>% 
    xml_text() 
df <- data.frame(OrganisationName, IdentifierElement) 
df 


それはあなたの問題を解決した場合はお知らせすることを忘れないでください:)

+0

@ウィリアムあなたの質問に答えた場合は、[投票する/正しい答えとしてマークする]必要があります(https://stackoverflow.com/help/someone-answers)。あなたが点を接続することができない場合は、plsは私たちに知らせることをためらうことはありません。 – Prem

関連する問題