在Linux上从命令行编辑web.xml

时间:2014-10-31 10:36:47

标签: xml

我正在尝试使用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-nameparam-value子元素添加到context-param。我的web.xml的缩减版本可在此处获取:http://pastebin.com/YgdGk6X9

有人能看到我的第二个xmlstarlet命令出错吗?

0 个答案:

没有答案