如何為 XML 設置 ~/.tidyrc 文件?
如何配置
tidy
解析 XML 而不是 HTML?解釋:
不久前,一位同事向我展示了一個
tidy
用於清理 XML 的技巧。顯然,您創建了一個
tidyrc
像這樣的文件:input-xml: yes quiet: yes indent: yes indent-attributes: yes indent-spaces: 4 char-encoding: utf8 wrap: 0 wrap-asp: no wrap-jste: no wrap-php: no wrap-sections: no
即使將其添加到
~/.tidyrc
,tidy
仍然嘗試解析為預設 HTML,而不是 XML:$ cat -v foo.out | tidy > foo.xml line 3 column 1 - Error: <data> is not recognized! line 3 column 1 - Warning: missing <!DOCTYPE> declaration line 3 column 1 - Warning: discarding unexpected <data>
我嘗試了各種權限:
[root@mongo-test3 tmp]# ls -ial ~ 51562 -rw------- 1 root root 11550 Jul 16 02:17 .bash_history 50973 -rw-r--r-- 1 root root 18 May 1 00:40 .bash_logout 51538 -rw-r--r-- 1 root root 176 May 1 00:40 .bash_profile 51537 -rw-r--r-- 1 root root 124 May 1 00:40 .bashrc 51561 -rwxr-xr-x 1 root root 164 Jul 16 22:16 .tidyrc
我試過命名文件
.tidyrc
,只是tidyrc
版本:
我在 MacOS 和 Cent 6.4 上都試過這個
Mac OSX 10.8.4
Darwin spuders-macbook-pro 12.4.0 達爾文核心版本 12.4.0:2013 年 5 月 1 日星期三 17:57:12 PDT;根:xnu-2050.24.15~1/RELEASE_X86_64 x86_64
CentOS 6.4
Linux mongo-test3 2.6.32-279.22.1.el6.x86_64 #1 SMP Wed Feb 6 03:10:46 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
研究:
通常我會問教我這個技巧的人,但他們無法交流。
解決方法:
作為一種解決方法,我可以使用該
-xml
標誌,但我更願意使用tidyrc
:$ cat -v foo.out | tidy -xml foo.xml
如果您查看手冊頁,
tidy
您會注意到一條註釋如下:預設配置文件的名稱。這應該是一個絕對路徑,因為您可能會從不同的目錄呼叫 tidy。的值
HTML_TIDY
將在編譯的預設值(用 定義-DTIDY_CONFIG_FILE
)之後,但在使用 . 指定的任何文件之前進行解析-config
。因此,它似乎
tidy
有一個編譯時選項,可以在其中硬編碼以查找特定的配置文件,就像您嘗試做的那樣。
tidy
瀏覽 Raggett 頁面上的一些線上文件時,我發現了這個簡介:或者,您可以通過名為“HTML_TIDY”的環境變數命名預設配置文件。請注意,這應該是絕對路徑,因為您可能希望在不同的目錄中執行 Tidy。您還可以在編譯時通過將 CONFIG_FILE 定義為路徑字元串來設置配置文件,請參閱
platform.h
.因此,在下載原始碼
tidy
並查看文件內部後,platform.h
我發現了以下幾行:/* #define TIDY_CONFIG_FILE "/etc/tidy_config.txt" */ /* original */ /* #define TIDY_CONFIG_FILE "/etc/tidyrc" */ /* #define TIDY_CONFIG_FILE "/etc/tidy.conf" */ /* Uncomment the following #define if you are on a system supporting the HOME environment variable. It enables tidy to find config files named ~/.tidyrc if the HTML_TIDY environment variable is not set. */ /* #define TIDY_USER_CONFIG_FILE "~/.tidyrc" */
如果你知道 C/C++,所有這些行都被註釋掉了,所以實際上
tidy
我有所有選項來使用禁用的配置文件。我還仔細檢查了為我的 Fedora 14 系統建構的包,以確保建構包的封包件形式 (tidy.spec
) 沒有任何configure
命令會覆蓋platform.h
. 我發現沒有這樣的覆蓋。因此,股票
tidy
似乎沒有能力尋找任何類型的配置文件。那麼你有什麼選擇呢?
好吧,您仍然可以
tidy
將配置文件作為命令行的一部分提供:$ ... | tidy -config ~/.tidyrc > foo.xml
此外,您可以使用
tidy
上面可能沒有註意到的另一個功能,即使用環境變數的能力HTML_TIDY
。它必須是絕對路徑,所以你不能使用“~/.tidyrc”,但你可以這樣做:$ export HTML_TIDY=" $ HOME/.tidyrc" $ cat -v foo.out | tidy > foo.xml
如果您想使該變數永久化,只需將其添加到您的
$HOME/.bashrc
文件中:export HTML_TIDY="$HOME/.tidyrc"
參考