İçeriği bir veri çerçevesine okuyan bir dizi XML dosyası ve bir R komut dosyası sahibim. Ancak, her zamanki gibi ayrıştırmak istediğim dosyaları aldım, ancak ad alanı tanımlarında, değerlerini normal olarak XPath ifadeleriyle seçmeme izin vermeyen bir şey var.R'de ayrıştırma XML: Yanlış ad alanları
XML dosyaları bu şekildedir:
xml_nons.xml
<?xml version="1.0" encoding="UTF-8"?>
<XML>
<Node>
<Name>Name 1</Name>
<Title>Title 1</Title>
<Date>2015</Date>
</Node>
</XML>
Diğeri:
xml_ns.xml
<?xml version="1.0" encoding="UTF-8"?>
<XML xmlns="http://www.nonexistingsite.com">
<Node>
<Name>Name 2</Name>
<Title>Title 2</Title>
<Date>2014</Date>
</Node>
</XML>
xmlns noktaları kokan URL var.
kullandığım R kodu şu şekildedir: Ancak
library(XML)
xmlfiles <- list.files(path = ".",
pattern="*.xml$",
full.names = TRUE,
recursive = TRUE)
n <- length(xmlfiles)
dat <- vector("list", n)
for(i in 1:n){
doc <- xmlTreeParse(xmlfiles[i], useInternalNodes = TRUE)
nodes <- getNodeSet(doc, "//XML")
x <- lapply(nodes, function(x){ data.frame(
Filename = xmlfiles[i],
Name = xpathSApply(x, ".//Node/Name" , xmlValue),
Title = xpathSApply(x, ".//Node/Title" , xmlValue),
Date = xpathSApply(x, ".//Node/Date" , xmlValue)
)})
dat[[i]] <- do.call("rbind", x)
}
xml <- do.call("rbind", dat)
xml
, bir sonucudur olarak ne alıyorum: Ben ikinci dosyadan ad bağlantıyı kaldırırsanız
Filename Name Title Date
./xml_nons.xml Name 1 Title 1 2015
Doğru olsun :
elbetteFilename Name Title Date
./xml_nons_1.xml Name 1 Title 1 2015
./xml_ns_1.xml Name 2 Title 2 2014
Ben orijinal XML dosyaları gelenler ad alanlarını kaldırmak için bir XSL olabilir, ama ben anlamak istiyorum R içinde çalışan bir çözüm var. R'ye sadece XML deklarasyonundaki her şeyi görmezden gelmek için bir yol var mı?