我正在尝试使用XmlStarlet从命令行更新我的tomcats web.xml文件。我需要将以下内容添加到web-app
元素:
<context-param>
<param-name>mobileEnabled</param-name>
<param-value>true</param-value>
</context-param>
我使用了许多临时文件和XmlStarlet命令来实现这一点:
xmlstarlet ed -N x="http://java.sun.com/xml/ns/j2ee" -s "/x:web-app" -t elem -n "context-param" -v "$$" web.xml > tmp
xmlstarlet ed -N x="http://java.sun.com/xml/ns/j2ee" -s "/x:web-app/x:context-param[text()='$$']" -t attr -n "tempAttr" -v "$$" tmp > tmp1
xmlstarlet ed -N x="http://java.sun.com/xml/ns/j2ee" -u "/x:web-app/x:context-param[@tempAttr]" -v "" tmp1 > tmp
xmlstarlet ed -N x="http://java.sun.com/xml/ns/j2ee" -s "/x:web-app/x:context-param[@tempAttr]" -t elem -n "param-name" -v "TEST_$$" \
-s "/x:web-app/x:context-param[@tempAttr]" -t elem -n "param-value" -v "VALUE_$$" tmp > tmp1
sed 's/ tempAttr=\"[0-9]*\"//g' tmp1 > tmp
我理想的是能够在1 xmlstarlet命令中执行此操作,因此我不必创建临时文件;到目前为止我的尝试都没有用。
xmlstarlet ed -N x="http://java.sun.com/xml/ns/j2ee" -s "/x:web-app" -t elem -n "context-param" -v "$$" \
-s "/x:web-app/x:context-param[text()='$$']" -t attr -n "tempAttr" -v "$$" \
-u "/x:web-app/x:context-param[@tempAttr]" -v "" \
-s "/x:web-app/x:context-param[@tempAttr]" -t elem -n "param-name" -v "TEST_$$" \
-s "/x:web-app/x:context-param[@tempAttr]" -t elem -n "param-value" -v "VALUE_$$" web.xml > tmp
这不会将param-name
和param-value
子元素添加到context-param
。我的web.xml的缩减版本可在此处获取:http://pastebin.com/YgdGk6X9
有人能看到我的第二个xmlstarlet命令出错吗?