如何为 XML 设置 ~/.tidyrc 文件?

如何为 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

即使将其添加到 后~/.tidyrctidy仍然尝试解析为默认 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有一个编译时选项,可以对其进行硬编码以查找特定的配置文件,正如您尝试做的那样。

浏览一些tidyRaggett 页面上的在线文档我看到了这个简介:

或者,您可以通过名为“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"

参考

相关内容