![如何为 XML 设置 ~/.tidyrc 文件?](https://linux22.com/image/45186/%E5%A6%82%E4%BD%95%E4%B8%BA%20XML%20%E8%AE%BE%E7%BD%AE%20~%2F.tidyrc%20%E6%96%87%E4%BB%B6%EF%BC%9F.png)
如何配置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 OS X 10.8.4
Darwin spuders-macbook-pro 12.4.0 Darwin 内核版本 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 2 月 6 日星期三 03:10:46 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
研究:
通常我会问教我这个技巧的人,但他们很难沟通。
解决方法:
作为解决方法,我可以使用该-xml
标志,但我更希望能够正常tidyrc
工作:
$ cat -v foo.out | tidy -xml foo.xml
答案1
如果您查看手册页,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”,但您可以这样做:
$ 导出 HTML_TIDY="$HOME/.tidyrc" $ cat -v foo.out |整洁 > foo.xml
如果您想让该变量永久存在,只需将其添加到您的$HOME/.bashrc
文件中即可:
export HTML_TIDY="$HOME/.tidyrc"