tidy
HTML 대신 XML을 구문 분석하도록 구성하려면 어떻게 해야 합니까 ?
설명하다:
얼마 전 한 동료가 나에게 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
XML tidy
이 아닌 기본 HTML로 구문 분석을 시도합니다.
$ 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 모두에서 시도했습니다.
맥 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
센트OS 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
답변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"