Xml

如何為 XML 設置 ~/.tidyrc 文件?

  • July 17, 2013

如何配置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"

參考

引用自:https://unix.stackexchange.com/questions/83302