【问题标题】:How to update values in a xml using shell script?如何使用 shell 脚本更新 xml 中的值?
【发布时间】:2013-07-30 07:31:59
【问题描述】:

我有一个格式如下的 XML

<config>
        <global> 
                <log>
                        <file>log/global.log</file>
                        <level>DEBUG</level>
                </log>
        </global>
        <pipeline name="MediaExchange">
                <stop-file>MediaExchange.STOP</stop-file>
                <!--Delay in seconds before each poll-->
                <poll-delay>30</poll-delay>
                <source type="Cardinal-CH5-Meta">
                        <passive-mode>true</passive-mode>
                        <username>cardinalch5</username>                       
                </source>
            ....

我正在尝试打印标签中的值,然后用其他值替换它。我编写了下面的代码来打印标签中的值

# Retrieve value from XML file
xpath()
{
        log DEBUG $scriptFile "Parsing XML xpath"
        if [ `echo $1 | grep -v grep | grep /@ | wc -l` -ne 0 ]; then
                argDelta=`echo $1 | sed ' s!.*/@!! ; s/"$// '`
                value=`echo "cat $1" | xmllint --shell $2 | grep -v grep | grep = | sed -n 's|'${argDelta}'="\(.*\)"|\1|p'`
        else
                argDelta=`echo $1 | sed ' s!.*/!! ; s/"$// '`
                value=`echo "cat $1" | xmllint --shell $2 | sed -n 's|<'${argDelta}'>\(.*\)</'${argDelta}'>|\1|p'`
        fi
        echo $value
}
username=$(xpath /config/pipeline/[@name=\'MediaExchange\']/source/[@type=\'Cardinal-CH5-Meta\']/username config/config.xml)

我遇到了以下异常

XPath error : Invalid expression
/config/pipeline/[@name='MediaExchange']/source/[@type='Cardinal-CH5-Meta']/username
                 ^
xmlXPathEval: evaluation failed
/config/pipeline/[@name='MediaExchange']/source/[@type='Cardinal-CH5-Meta']/username: no such node

有人可以帮忙吗?

【问题讨论】:

    标签: shell unix awk


    【解决方案1】:

    您的 Xpath 查询不正确,请看:

    /config/pipeline[@name='MediaExchange']/source[@type='Cardinal-CH5-Meta']/username/text()
    

    【讨论】:

    • 当我尝试使用上面的行命令替换时出现以下错误:意外标记附近的语法错误(' command substitution : xpath /config/pipeline[@name='MediaExchange']/source[@type ='Cardinal-CH5-Meta']/username/text() config/config.xml'
    • 我使用了以下两行。用户名=$(xpath /config/pipeline/[@name='MediaExchange']/source/[@type='Cardinal-CH5-Meta']/username/text() config/config.xml) 用户名​​=$(xpath /config/pipeline[@name='MediaExchange']/source[@type='Cardinal-CH5-Meta']/username/text() config/config.xml) 但是这两行都抛出异常。
    猜你喜欢
    • 1970-01-01
    • 2018-12-31
    • 2017-10-22
    • 2018-08-24
    • 2021-06-15
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多