xml - 使用 XPATH 从不同的子元素中提取值

标签 xml bash ubuntu xpath

目前我面临一个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/

相关文章:

php - 将表单重定向到另一个页面而不是 API

java - Android,Json解析错误

bash - 如何制作一个 cronjobbable 脚本来计时上传?

python - Bash 认为字符串没有被正确引用?

Linux - ping 文件中的所有设备以检查可访问性

git - 无法在 Ubuntu 上从 bitbucket 克隆 repo

eclipse - 搞砸了 Eclipse 窗口布局

java - XSD创建问题

android - 使用 Google Maps Android API v2 时出现错误签名无效。发现 :

bash - 织物运行和直接运行之间的不同结果