2013-02-27 96 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