XMLstarlet 过滤器和导出

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

我需要使用 xmlstarlet 来过滤 XML 的内容并根据子元素标准导出元素

使用这种xml:

<products>
<product>
<product_code>1-70-032-0023</product_code>
<availability>criteria_i_need</availability>
<quantity>393</quantity>
</product>
<product>
<product_code>1-70-032-0024</product_code>
<availability>criteria_i_need</availability>
<quantity>19</quantity>
</product>
<product>
<product_code>1-70-032-0046</product_code>
<availability>criteria_i_do_NOT_need</availability>
<quantity>351</quantity>
</product>
</products>

使用命令:

xmlstarlet ed -d '/product/availability[. = "criteria_i_need"]' input-file.xml > filtered-file.xml

但输出文件包含所有元素,而不仅仅是符合条件的 2 个第一个元素。

xmlstarlet
1个回答
1
投票

不完全清楚您期望

filtered-file.xml
包含什么,但是由于您使用
ed -d
作为论点,我假设您想删除一个
<product>
确实符合您的标准并保存其余的。

所以我会把你的命令改为

xmlstarlet ed -d '//product[not(.//availability[. = "criteria_i_need"])]' input-file.xml > filtered-file.xml

看看它是否有效。

或者,您可以删除特定条件,例如:

xmlstarlet ed -d 'products/product[availability = "criteria_i_do_NOT_need"]'

或与

contains()

xmlstarlet ed -d 'products/product[contains(availability, "_NOT_")]'
© www.soinside.com 2019 - 2024. All rights reserved.