【问题标题】:Check content of XML in bash在 bash 中检查 XML 的内容
【发布时间】:2018-02-28 12:37:01
【问题描述】:

我无法解决这个问题,希望得到您的帮助。

在 bash 脚本中,我使用 curl 命令从服务器获取数据。 curl 响应被放入 bash 变量中,因为我想检查响应。

响应如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
  <env:Body><dp:response xmlns:dp="http://www.datapower.com/schemas/management">
    <dp:timestamp>2018-02-28T13:31:36+01:00</dp:timestamp>
    <dp:result> OK </dp:result>
    </dp:response>
  </env:Body>
</env:Envelope>

重要的部分是:

<dp:result> OK </dp:result>

如何在我的 bash 脚本中检查这个确切的字符串是否在变量中(或不在)? 我尝试了几种不同类型的转义方法,但是到目前为止都失败了(总是以一个特殊字符出现问题)。

感谢您的帮助!

【问题讨论】:

    标签: bash shell variables curl


    【解决方案1】:

    试试这个,为正确的工作使用合适的工具

    命令:

    curl ..... | xmllint --xpath '//*[local-name()="result"]/text()' 
    

    xmllint --xpath '//*[local-name()="result"]/text()' http://domain.tld/path
    

    curl ..... | xmlstarlet sel -t -v '//*[local-name()="result"]/text()'
    

    输出:

    OK
    

    最后:

    #!/bin/bash
    
    result="$(chosen_command)"
    
    if [[ $result == *OK* ]]; then
        echo "OK"
    else
        echo >&2 "ERROR"
        exit 1
    fi
    

    (将chosen_command替换为...您选择的命令)

    【讨论】:

    • 非常感谢您的及时回复......但我的大部分回复都没有显示在问题中......由于大量特殊字符。我正在尝试修复它....
    • 您应该尽可能添加更多信息。请阅读MCVE
    • 你好吉尔斯,非常感谢你。有用!非常感谢。
    猜你喜欢
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    相关资源
    最近更新 更多