2013-02-27 100 views
3

我有xml文件xmlstarlet更新值没有任何反应

<?xml version="1.0"?> 
<preferences> 
    <!--General options--> 
    <options> 
      <dbHost>localhost</dbHost> 
      <dbUser>bwserver</dbUser> 
      <dbPass>bwserver</dbPass> 
      <dbPort>3306</dbPort> 

和等

我怎样才能更新值DBUSER?

当i型 xmlstarlet编辑--update '/喜好/选择/ DBUSER /' --value 123的preferences.xml 没有任何反应,我只看到在终端文件的内容。而且还没有触及xml文件。

回答

5

你有两个缺点:

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

更多信息

+0

重定向到同一个文件xmlstarlet edit --help类型是shell脚本错误。你可以避开小文件,但'> preferences.xml'本身会创建一个新文件。 (我的xmlstarlet没有用于编辑的全局选项),所以最安全的路径是'xmlstarlet .... file.xml> tmp_file.xml &&/bin/mv tmp_file.xml file.xml'。 (对于需要处理原始文件的新需求的时间),我更愿意保留原始文件,并按照以下步骤使用新文件,但这当然会使空间使用量翻倍,并且需要在某些时候进行额外的清理。祝你们好运。 – shellter 2017-12-18 18:12:30