Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
xmlstarlet更新值没有任何变化_Xml_Bash_Xmlstarlet - Fatal编程技术网

xmlstarlet更新值没有任何变化

xmlstarlet更新值没有任何变化,xml,bash,xmlstarlet,Xml,Bash,Xmlstarlet,我有一个xml文件 <?xml version="1.0"?> <preferences> <!--General options--> <options> <dbHost>localhost</dbHost> <dbUser>bwserver</dbUser> <dbPass>bwserver<

我有一个xml文件

<?xml version="1.0"?>
<preferences>
    <!--General options-->
    <options>
            <dbHost>localhost</dbHost>
            <dbUser>bwserver</dbUser>
            <dbPass>bwserver</dbPass>
            <dbPort>3306</dbPort>
什么也没发生。我只在终端中看到文件内容。未触及xml文件。

您有两个错误:

  • 您的XPath表达式无效。删除尾部斜杠,使其成为
    /preferences/options/dbUser
  • 默认情况下,xmlstarlet不会更改输入文件,而是在标准输出中输出结果。您可以将输出重定向到您的输入文件(或任何其他文件)
    xmlstarlet edit--update'/preferences/options/dbUser'--value 123 preferences.xml>preferences.xml
    将原始文件替换为xmlstarlet输出,也可以使用全局选项
    --inplace
    将输入文件替换为输出命令是
    xmlstarlet edit--inplace--update'/preferences/options/dbUser'--value 123 preferences.xml

  • 键入
    xmlstarlet edit--help
    了解更多信息

    在shell脚本中重定向到同一个文件是错误的。对于小文件,您可以不受影响,但是
    >首选项.xml
    本身将创建一个新文件。(我的xmlstarlet没有--inplace全局编辑选项),因此最安全的路径是
    xmlstarlet….file.xml>tmp_file.xml&&/bin/mv tmp_file.xml file.xml
    (用于处理原始文件时需要新要求等的时候),我宁愿保留我的原始文件,并让以下步骤使用新文件,但这当然会使空间使用量加倍,并在某些时候需要额外清理。祝大家好运。
    xmlstarlet edit --update '/preferences/options/dbUser/'  --value 123 preferences.xml