Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用“中的XML节点”;R";_Xml_R_Xpath - Fatal编程技术网

使用“中的XML节点”;R";

使用“中的XML节点”;R";,xml,r,xpath,Xml,R,Xpath,给定以下XML文件: library(XML) xmlobj <- xmlTreeParse("my_file.xml", useInternalNodes = TRUE) 1. 10 20 2. 30 50 通过以下R代码,我可以在XML文件中读取: library(XML) xmlobj <- xmlTreeParse("my_file.xml", useInternalNodes = TRUE) 在第二步中,我想在步骤1中提取的列表中的每个XML节点上调用一个函数,返回

给定以下XML文件:

library(XML)
xmlobj <- xmlTreeParse("my_file.xml", useInternalNodes = TRUE)

1.
10
20
2.
30
50
通过以下R代码,我可以在XML文件中读取:

library(XML)
xmlobj <- xmlTreeParse("my_file.xml", useInternalNodes = TRUE)
在第二步中,我想在步骤1中提取的列表中的每个XML节点上调用一个函数,返回XML节点列表“D”。我试图从第一步得到列表中第一个“A”元素的子元素“C”:

xmlChildren(asXMLNode(node_a["C",1]))
但结果是:

named list()
attr(,"class")
[1] "XMLNodeList"
最后,我想为每个A分别设置D值(一个ID为1的A的D值列表和一个ID为2的A的D值列表)


或者换句话说,我想得到一个列表,其中包含ID为1的元素a的所有D元素的值,另一个列表包含ID为2的元素a的所有D元素的值

我不确定您想要的中间步骤,但要得到D的值

node_a <- xpathSApply(doc = xmlobj, path = "//D", xmlValue, trim = TRUE)

> node_a
[1] "10" "20" "30" "50"
node\u a node\u a
[1] "10" "20" "30" "50"

在问题的开头调用xml文本

library(XML)
xml <- xmlParse(xmlText,asText=T)
lapply(xml["//A//C"],function(node)sapply(xmlElementsByTagName(node,"D"),xmlValue))
# [[1]]
#    D    D 
# "10" "20" 
#
# [[2]]
#    D    D 
# "30" "50" 
库(XML)

xml问题是我希望D的值被包含它们的A分割。例如,我只希望第一个或第二个A元素(ID为1或ID为2)的值为D。因此我尝试了以下方法:node_a使用getNodeSet返回子节点,然后应用sappy(getNodeSet(xmlobj,“//a”)、xpathsaply,“../D”,xmlValue)等函数。非常感谢,这看起来非常好!也许这是一个愚蠢的问题,但您能否告诉我如何将XML文本从XML文件获取到变量“xmlText”?您只需使用文件名或url并保留
asText=FALSE
。也。
library(XML)
xml <- xmlParse(xmlText,asText=T)
lapply(xml["//A//C"],function(node)sapply(xmlElementsByTagName(node,"D"),xmlValue))
# [[1]]
#    D    D 
# "10" "20" 
#
# [[2]]
#    D    D 
# "30" "50" 
get.D <- function(node) unname(sapply(xmlElementsByTagName(node,"D"),function(n)as.integer(xmlValue(n))))
lapply(xml["//A//C"],get.D)
# [[1]]
# [1] 10 20
#
# [[2]]
# [1] 30 50