mieki256's diary



2024/07/30(火) [n年前の日記]

#1 [prog] XML整形について

1行でずらずらと書かれたXMLを、人間の目でも見易いように整形したい。利用できるツールはどんなものがあるのかメモしておく。数日前にも一部のツールについてメモしていたような気もするけれど…。

環境は Windows10 x64 22H2。

DevToys :

GUIで利用できる DevToys というツールに、XML整形機能がある。DevToys 2.0.2.0 x64 Portable を試用。

_DevToys - A Swiss Army knife for developers

「ツールを検索」と表示されてる検索欄に「xml」と打ち込めば、「XML フォーマッター」がリストアップされる。XMLを貼り付けたり、ファイルを開いたりして整形できる。

xmllint :

Linux の libxml2パッケージ等に含まれている。Windows10 x64 22H2 + MSYS2 上で libxml2 をインストールしたら利用できるようになった。
pacman -S libxml2
pacman -S mingw-w64-x86_64-libxml2
pacman -S mingw-w64-i686-libxml2

$ which xmllint
/mingw64/bin/xmllint

$ xmllint --version
D:\msys64\mingw64\bin\xmllint.exe: using libxml version 21209
   compiled with: Threads Tree Output Push Reader Patterns Writer SAXv1 HTTP DTDValid HTML C14N Catalog XPath XPointer X
Include Iconv ISO8859X Unicode Regexps Automata Schemas Schematron Modules Debug Zlib Lzma

xmllint --format INPUT.xml -o OUTPUT.xml

サクラエディタでXMLを整形 :

無料で使えるテキストエディタ、サクラエディタ上で、XML整形ができるマクロがある。Windows10 x64 22H2 + サクラエディタ 32bit Ver. 2.4.2.6048 で試用してみた。

_サクラエディタ
_サクラエディタでXMLを整形 - My備忘録
_Macro/投稿/211 - SakuraEditorWiki

XmlFormat.js を入手。サクラエディタインストールフォルダ\macros\ に入れた。

前述のページのコメントによると、文字参照のエスケープについては、「&」を最初に変換したほうがいいらしい。以下のように修正。
//文字参照をエスケープする
String.prototype.escape = function() {
    return this.replace("&", "&")
               .replace("<", "&lt;")
               .replace(">", "&gt;")
               .replace("\"", "&quot;")
               .replace("'", "&apos;");
}

選択範囲を指定後、Shift + Ctrl + Alt + B で呼び出せるように設定しておいた。尚、XMLにはならない文字列が含まれてしまっていると整形処理は走らないので注意。

Notepad++でXMLを整形 :

Notepad++ もプラグインを追加することでXMLの整形ができるらしい。Windows10 x64 22H2 + Notepad++ 8.6.8 32bit で試用してみた。

プラグイン → プラグイン管理。「XML Tools」にチェックを入れる。XML Tools の現行パージョンは、3.1.1.13 だった。

インストールに成功すると、プラグイン → XML Tools が選べるようになる。Pretty Print (Ctrl + Alt + Shift + B) で整形ができる。

XMLStarlet :

以下のページによると、XMLStarlet というツールもあるらしい。

_色々なコマンドラインでの XML の整形方法 - 重要なお知らせ
_XMLStarlet - Wikipedia
_XMLStarlet Command Line XML Toolkit: Download
_XMLStarlet command line XML toolkit - Browse Files at SourceForge.net

Windows10 x64 22H2上で、xmlstarlet-1.6.1-win32.zip を入手して解凍。公式バイナリは xml.exe になっていたけれど、xmlstarlet.exe にリネームして、パスを通してある `D:\home\bin\` 以下に入れておいた。

以下でフォーマットできるらしい。
xmlstarlet fo hoge.xml

#2 [linux][apache] テキストファイルがCGIとして扱われてしまって悩んだ

Webサーバ Apache2で公開しているディレクトリ内に、hoge.pl.txt や hoge.cgi.txt を置くと、何故か CGI として扱われてしまうようで、実行しようとしてエラーになることに気づいた。環境は Debian Linux 10 buster i686 + Apache2 2.4.59-1~deb10u1。

ファイル名の最後が .txt なのだからテキストファイル(text/plain)として扱われるはずでは…? もしかして、ファイル名に .pl や .cgi が含まれているだけで、CGI実行ファイルとして扱ってしまう…?

とりあえず、.htaccess に以下のような記述をして、テキストファイルとして扱われるようにしてみた。
Options +Indexes -ExecCGI +FollowSymLinks

AddType text/plain .pl.txt
AddType text/plain .cgi.txt

<FilesMatch "\.(pl|cgi|txt)$">
    ForceType text/plain
    SetHandler none
</FilesMatch>

<Files ~ "\.(pl|cgi)\.txt$">
    ForceType text/plain
    SetHandler none
    RemoveHandler .pl .cgi
    RemoveHandler cgi-script
</Files>

余談。ググってみても、CGIとして動いてくれない状態を動くようにするための指定/記述ばかりで、その逆が全然見つからない…。Microsoft Copilot に何度も尋ねまくって色々試してみたけれど、どうやら RemoveHandler .pl .cgi が効いてくれたっぽい。

#3 [nitijyou] 日記をアップロード

2024/06/06を最後にアップロードしてなかったのでアップロード。

以上、1 日分です。

過去ログ表示

Prev - 2024/07 -
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project