XML - 在 XML 文件中搜索值
XML - Search for value in XML file
我有一个使用 xmlstarlet
编辑 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>
但是问题是,如果脚本 运行 不止一次,我会再次添加上面的块。我想避免这种情况,但我不确定该怎么做。我在文档中找不到任何支持条件语句的内容
使用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
我有一个使用 xmlstarlet
编辑 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>
但是问题是,如果脚本 运行 不止一次,我会再次添加上面的块。我想避免这种情况,但我不确定该怎么做。我在文档中找不到任何支持条件语句的内容
使用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