相关的xml文件:
<properties>
<structure name="preference">
<structure name="cam1">
<property name="number" value="8"/>
<property name="name" value="eddi"/>
</structure>
<structure name="cam2">
<property name="number" value="2"/>
<property name="name" value="franck"/>
</structure>
</structure>
</properties>
在我的bash脚本中,我想插入值&#34; 8&#34;在变量中然后在条件(if)中使用它。如果该值等于&#34; 8&#34;我必须删除结构&#34; cam1&#34;。
所以,我试图在这个命令中使用xmlstarlet工具:
xmlstarlet sel -T -t -m '/properties/structure[@name="preference"]/structure[@name="cam1"]/property[@name="number"]/@value' -v . -n file.xml
这是在终端中用来获取值的命令,在我用这种方式编写的脚本中:
camera=`xmlstarlet sel -T -t -m \'/properties/structure[@name=\"preference\"]/structure[@name=\"cam1\"]/property[@name=\"number\"]/@value\' -v . -n $1`
然后尝试打印变量:
echo $camera
当然我没有结果&#34; 8&#34;打印,我觉得我的背闪有问题...... 有没有其他方法可以轻松删除结构?
答案 0 :(得分:0)
我不是100%肯定你是如何确定“8”的来源。为什么要在delete中提取要用作比较的值?
以下是一个示例,当structure
属性值为property
的子name
元素具有number
属性时,该元素将删除value
元素值为8
。
希望这有帮助。
#!/usr/bin/env bash
toDelete="8"
modXML=$(xmlstarlet ed -d "/properties/structure[@name='preference']/structure[property[@name='number']/@value=$toDelete]" $1)
echo $modXML