2017-04-25 42 views
1

我有一個使用xmlstarlet使用這個編輯XML文件的腳本:XML - 在XML文件中查找值

sudo xmlstarlet ed -L --omit-decl \ 
-s '//configuration' -t elem -n "property" -v '' \ 
-s '//configuration/property[last()]' -t elem -n "name" -v "this.is.a.node" \ 
-s '//configuration/property[last()]' -t elem -n "value" -v "value.for.above.node" \ 
-s '//configuration' -t elem -n "property" -v '' \ 
-s '//configuration/property[last()]' -t elem -n "name" -v "this.is.another.node" \ 
-s '//configuration/property[last()]' -t elem -n "value" -v "value.for.second" \ 
/path/to/file 

導致此:

<configuration> 
    .... 
    .... 
    .... 
    <property> 
     <name>this.is.a.node</name> 
     <value>value.for.above.node</value> 
     </property> 
     <property> 
     <name>this.is.another.node</name> 
     <value>value.for.second</value> 
     </property> 
    </configuration> 

然而問題是,如果腳本運行不止一次,我會再次添加上述塊。我想避免這種情況,但我不知道如何去做。我無法找到的文檔上的任何支持的條件語句

回答

2

使用count

if [[ $(xmlstarlet sel -t -v "count(/configuration/property[name='this.is.a.node'])" /paht/to/file/xml) -eq 1 ]];then echo "there"; else echo "nope"; fi 
+0

的作品!非常感謝 – Beginner