EBM*_*EBM 5 xml bash xpath xmlstarlet
例如,给定:
<fruit>
<banana source='Ecuador' category='I'>
<quantity>1</quantity>
</banana>
<banana source='Costa Rica' category='I'>
<quantity>1</quantity>
</banana>
</fruit>
Run Code Online (Sandbox Code Playgroud)
说我想改变
<banana source='Costa Rica' category='I'>
Run Code Online (Sandbox Code Playgroud)
到
<banana source='Costa Rica' category='II'>
Run Code Online (Sandbox Code Playgroud)
或者它的数量为 2,如果我想过滤源和初始类别值,我将如何引用它?
我正在尝试执行以下操作:
xmlstarlet ed -u "/fruit/banana[@source='Ecuador' @category='I']/quantity" -v 2
Run Code Online (Sandbox Code Playgroud)
...但这会导致语法错误,如下所示:
Invalid predicate: /fruit/banana[@source='Ecuador' @category='I']/quantity
Invalid expression: /fruit/banana[@source='Ecuador' @category='I']/quantity
Run Code Online (Sandbox Code Playgroud)
经过一番反复试验,得出了一个解决方案:
我需要使用下一个属性关闭并重新打开 []。例如:
xmlstarlet ed -u "/fruit/banana[@source='Ecuador'][@category='I']/quantity" -v 2 example.xml
Run Code Online (Sandbox Code Playgroud)
并且会正确输出:
<?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>
Run Code Online (Sandbox Code Playgroud)
编辑:也有效:
xmlstarlet ed -u "/fruit/banana[@source='Ecuador' and @category='I']/quantity" -v 2 example.xml
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1403 次 |
| 最近记录: |