【问题标题】:Replace a value in XML [duplicate]替换 XML 中的值 [重复]
【发布时间】:2015-02-02 13:30:35
【问题描述】:

我有一个如下的 xml 标签:

<Setting Name="Check" Type="xsd:integer">53</Setting>

我只需要用最好的代码获取 53 个。有人可以推荐吗?

我知道可以实现如下:

grep "Setting Name=\"Check\"" abc-test.xml | cut -d'>'  -f 2 |  cut -d'<' -f 1

谢谢

【问题讨论】:

    标签: linux awk sed


    【解决方案1】:

    对于这类任务,我总是建议使用 xml 解析器,例如 并使用 xpath 表达式。一个例子:

    xmlstarlet sel -t -v '/Setting[@Name="Check"]/text()' abc-test.xml
    

    产生:

    53
    

    更新 版本:

    xmllint --xpath '/Setting[@Name="Check"]/text()' abc-test.xml
    

    【讨论】:

    • 但是,xmlstarlet 在正在使用的 linux 主机上根本不可用。请以其他方式告诉我
    • 您也可以使用xmllint,替换二进制文件及其参数,但替换xpath 表达式和输入文件。但在找到您的工具箱之前,我不会尝试。你最好访问这个how to parse xml from shell并选择一个。
    • 我在主机中看到 --xpath for xmllint is not supported..I get the Usage listed Unknown option --xpath Usage : xmllint [options] XMLfiles ...
    • 如何使用 xmllint 将值替换为其他值?
    【解决方案2】:

    可能的代码如下..我不知道这是否最适合你。

    使用 sed

    sed '/Setting Name="Check"/{s/^[^>]\+>\([0-9]\+\)<.*/\1/g}'
    

    示例

    echo '<Setting Name="Check" Type="xsd:integer">53</Setting>'|sed '/Setting Name="Check"/{s/^[^>]\+>\([0-9]\+\)<.*/\1/g}'
    

    使用 awk

       awk -v FS="<[^0-9]+>" '$0~"Setting Name=\"Check\""{print $2}'
    

    示例

    echo '<Setting Name="Check" Type="xsd:integer">53</Setting>'|awk -v FS="<[^0-9]+>" '$0~"Setting Name=\"Check\""{print $2}'
    

    【讨论】:

      【解决方案3】:

      只有grep 命令

      grep -oP '(?<=>).*?(?=</Setting>)' input.xml
      

      对于扩展条件(即:检查)您也可以像这样提及元素,

      grep "Name=\"Check\"" input.xml|grep -oP '(?<=>).*?(?=</Setting>)' 
      

      输出将是,

      53
      

      这是我尝试过的,

      【讨论】:

      • 这是一个很棒的命令。谢谢。但是现在面临的问题是上面的 grep 显示了许多以 结尾的行。可以解释一下上面的命令吗?实际上我只想选择行 53
      • 谢谢.. 这实际上对我帮助很大。我在找这个:)
      • @user1677102 很高兴知道它解决了你的问题,希望你不介意接受这个作为答案。
      • 当然,我一定会接受这个答案:)
      猜你喜欢
      • 2014-06-26
      • 1970-01-01
      • 2015-09-23
      • 2011-09-02
      • 2019-10-11
      • 2020-11-26
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      相关资源
      最近更新 更多