目前我面临一个xml文件,它基本上如下所示,但包含数千个元素:
<Data> <Elements> <Element> <Subentry1>Value1</Subentry1> <Subentry2>MoreData</Subentry2> </Element> <Element> <Subentry1>Value2</Subentry1> <Subentry2>MuchMoreData</Subentry2> </Element> </Elements> </Data>
我正在使用 Ubuntu,并希望打印值 Subentry1 和 Subentry2 的每个组合。对于上述示例,希望的输出是:
Value1_MoreData
Value2_MuchMoreData
在阅读了有关 XPATH 字符串连接函数的内容并尝试了不支持 XPATH 2.0 的无尽 ubuntu 工具后,我最终得到了以下工作解决方案(bash 脚本):
totalNumber=$(xmllint --xpath 'count(//Element)' example.xml)
i=1
while [ $i -le $totalNumber ]
do
xmllint --xpath "concat((//Element)[$i]/Subentry1/text(),'_',(//Element)[$i]/Subentry2/text())" example.xml
echo -e ""
let i=$i+1
done
但是,如果您想处理例如,这是减慢速度的方式。 10000 个元素。如果有专家能给我提示,我会很高兴。
最佳答案
如果您能够使用 xmlstarlet , 你可以做:
==> xml sel -t -m "/Data/Elements/Element" -v "concat(Subentry1,'_',Subentry2)" -n test.xml
Value1_MoreData
Value2_MuchMoreData
关于xml - 使用 XPATH 从不同的子元素中提取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45826535/