例如,给定:
<fruit>
<banana source='Ecuador' category='I'>
<quantity>1</quantity>
</banana>
<banana source='Costa Rica' category='I'>
<quantity>1</quantity>
</banana>
</fruit>
说我想改变
<banana source='Costa Rica' category='I'>
到
<banana source='Costa Rica' category='II'>
或其数量为2,如果我想过滤源和初始类别值,我将如何引用它?
我正在尝试执行以下操作:
xmlstarlet ed -u "/fruit/banana[@source='Ecuador' @category='I']/quantity" -v 2
...但是这会导致语法错误,如下所示:
Invalid predicate: /fruit/banana[@source='Ecuador' @category='I']/quantity
Invalid expression: /fruit/banana[@source='Ecuador' @category='I']/quantity
答案 0 :(得分:3)
经过相当多的反复试验,达成了解决方案:
我需要关闭并使用下一个属性重新打开[]。例如:
xmlstarlet ed -u "/fruit/banana[@source='Ecuador'][@category='I']/quantity" -v 2 example.xml
并且会正确输出:
<?xml version="1.0"?>
<fruit>
<banana source="Ecuador" category="I">
<quantity>2</quantity>
</banana>
<banana source="Costa Rica" category="I">
<quantity>1</quantity>
</banana>
</fruit>
编辑:也有效:
xmlstarlet ed -u "/fruit/banana[@source='Ecuador' and @category='I']/quantity" -v 2 example.xml