基于bash中的XML内容验证获取内容

问题描述 投票:1回答:3

我有一个XML如下

<demos>
 <demo>
  <a>00</a>
  <b>First</b>
  <c>ProjectA</c>
 </demo>
 <demo>
  <a>01</a>
  <b>Second</b>
  <c>ProjectB</c>
 </demo>
</demos>

示例1:如果在<a>标签内有00<c>标签有ProjectA,输出应该是First

示例2:如果在<a>标签内有01<c>标签有ProjectB,则输出应为Second

我想尝试使用xml_grep或xpath,因为默认情况下这些是在linux中安装的软件包。我试过不同的方式,比如

xpath xtest.xml '//a[text()="01"]/text() | //b'

但这种验证不起作用。

xml linux bash shell xml-parsing
3个回答
1
投票

例如1,您必须运行:

xpath -q -e '//demo[(a/text()="00") and (c/text()="ProjectA")]/b/text()' xtest.xml

例如2:

xpath -q -e '//demo[(a/text()="01") and (c/text()="ProjectB")]/b/text()' xtest.xml

请注意,任何Linux上都不会默认安装xpath。在Ubuntu上,你首先必须运行sudo apt install libxml-xpath-perl


0
投票

以下命令使用XML作为file.xml

 xpath file.xml '//demo[a/text()="00" and c/text()="ProjectA"]/b/text()'

0
投票

强大的xmlstarlet解决方案:

xmlstarlet sel -t -m '//demo/a' --if '. = 00 and ./following-sibling::c="ProjectA"' \
-v './following-sibling::b' -n input.xml

输出:

First

xmlstarlet sel -t -m '//demo/a' --if '. = 01 and ./following-sibling::c="ProjectB"' \
-v './following-sibling::b' -n input.xml

输出:

Second
© www.soinside.com 2019 - 2024. All rights reserved.