获取一个节点';s属性,这取决于另一个属性及其父属性(在R中使用Xpath)
我有一个具有以下结构的xml文档,我想根据Balance属性bsdate值和BalanceRow属性rowNum值选择valueStart和valueEnd属性值。例如:获取一个节点';s属性,这取决于另一个属性及其父属性(在R中使用Xpath),r,xml,xpath,R,Xml,Xpath,我有一个具有以下结构的xml文档,我想根据Balance属性bsdate值和BalanceRow属性rowNum值选择valueStart和valueEnd属性值。例如: bsdate='2013'和rowNum='200'的valueStart应为'3000',VALUEND应为'4000' bsdate='2014'和rowNum='102'的valueStart应为'5500',VALUEND应为'6500' 可以在R里做吗?我花了一整天寻找答案,但没能找到 <Root
- bsdate='2013'和rowNum='200'的valueStart应为'3000',VALUEND应为'4000'
- bsdate='2014'和rowNum='102'的valueStart应为'5500',VALUEND应为'6500'
<Root
xmlns:a="http://www.w3.org/TR/html4/">
<Balance bsdate = '2013' bsregdate = '2014.04.01'>
<BalanceRows type = 'B' rowNum = '100' valueStart = '1000' valueEnd = '2000'></BalanceRows>
<BalanceRows type = 'B' rowNum = '101' valueStart = '3000' valueEnd = '4000'></BalanceRows>
<BalanceRows type = 'B' rowNum = '102' valueStart = '5000' valueEnd = '6000'></BalanceRows>
<BalanceRows type = 'P' rowNum = '200' valueStart = '7000' valueEnd = '8000'></BalanceRows>
<BalanceRows type = 'P' rowNum = '201' valueStart = '9000' valueEnd = '10000'></BalanceRows>
</Balance>
<Balance bsdate = '2014' bsregdate = '2015.04.02'>
<BalanceRows type = 'B' rowNum = '100' valueStart = '1500' valueEnd = '2500' ></BalanceRows>
<BalanceRows type = 'B' rowNum = '101' valueStart = '3500' valueEnd = '4500'></BalanceRows>
<BalanceRows type = 'B' rowNum = '102' valueStart = '5500' valueEnd = '6500'></BalanceRows>
<BalanceRows type = 'P' rowNum = '200' valueStart = '7500' valueEnd = '8500'></BalanceRows>
<BalanceRows type = 'P' rowNum = '201' valueStart = '9500' valueEnd = '15000'></BalanceRows>
</Balance>
</Root>
使用测试数据
library(xml2)
xx <- read_xml("<Root xmlns:a=\"http://www.w3.org/TR/html4/\">
<Balance bsdate = '2013' bsregdate = '2014.04.01'>
<BalanceRows type = 'B' rowNum = '100' valueStart = '1000' valueEnd = '2000'></BalanceRows>
<BalanceRows type = 'B' rowNum = '101' valueStart = '3000' valueEnd = '4000'></BalanceRows>
<BalanceRows type = 'B' rowNum = '102' valueStart = '5000' valueEnd = '6000'></BalanceRows>
<BalanceRows type = 'P' rowNum = '200' valueStart = '7000' valueEnd = '8000'></BalanceRows>
<BalanceRows type = 'P' rowNum = '201' valueStart = '9000' valueEnd = '10000'></BalanceRows>
</Balance>
<Balance bsdate = '2014' bsregdate = '2015.04.02'>
<BalanceRows type = 'B' rowNum = '100' valueStart = '1500' valueEnd = '2500' ></BalanceRows>
<BalanceRows type = 'B' rowNum = '101' valueStart = '3500' valueEnd = '4500'></BalanceRows>
<BalanceRows type = 'B' rowNum = '102' valueStart = '5500' valueEnd = '6500'></BalanceRows>
<BalanceRows type = 'P' rowNum = '200' valueStart = '7500' valueEnd = '8500'></BalanceRows>
<BalanceRows type = 'P' rowNum = '201' valueStart = '9500' valueEnd = '15000'></BalanceRows>
</Balance>
</Root>")
xml_attrs(xml_find_all(xx, "//Balance[@bsdate = '2014']/BalanceRows[@rowNum='200']"))
# [[1]]
# type rowNum valueStart valueEnd
# "P" "200" "7500" "8500