• 締切済み

xmlファイルを見やすく開くには?

https://okwave.jp/qa/q9361645.html で質問した内容の Linux に関する部分は あちらのカテゴリーで回答がつきそうにないので、こちらで質問いたします。 MBSAを用いてWindowsUpdateのオフライン適用に挑戦していまして、 MBSAが吐き出したxmlファイルを読むのにExcelViewerのインストールはしたくないので linuxのxmltoを使おうとしました。 xmlファイルをutf8に変換後、 (最初"parser error : Input is not proper UTF-8, indicate encoding !"というメッセージが出たため) $ xmlto -o ./html_xml/ html Updatecheck_utf8.xml xmlto: /home/mess/Desktop/Updatecheck_utf8.xml does not validate (status 1) xmlto: Fix document syntax or use --skip-validation option /home/mess/Desktop/Updatecheck_utf8.xml:16: parser error : Specification mandate value for attribute teData teData ID="MS11-025" GUID="729a0dcb-df9e-4d02-b603-ed1aee074428" BulletinID="MS1 ^ <以下略> こんな感じでhtml変換に失敗します。 LibreOfficeCalcでメニューから「データ」、「xmlソース」を選択し ソースファイルでこのxmlファイルを選んでも「インポート」ボタンが暗いままで先に進めません。 ただ、結局やりたかったことは <DownloadURL> と </DownloadURL> に挟まれた部分を次々に抜き出していって、さらに行頭にwgetをつけて wget http://hogehoge1 wget http://hogehoge2 と続いていくスクリプトを自動生成したいということです。 LibreOfficeCalcで開くことができれば一番簡単だと思います。 どのようにすればいいでしょうか? よろしくお願いします。

みんなの回答

  • trapezium
  • ベストアンサー率62% (276/442)
回答No.2

> IsInstalled="false" > のもののみを抜き出せるとさらにありがたいです。 サンプルに無いので問題あるかもしれませんが、例えばこんな感じでしょうか。 echo 'cat /XMLOut/Check/Detail/UpdateData' | xmllint --shell foo.xml | awk -F '</?[a-zA-Z]+>' '/IsInstalled="false"/{f++} /DownloadURL/ && f{print "wget "$2; f=0}' もっと条件が複雑になるようだと、スクリプト言語のどれか (perl etc) で XML parse した方が、自由度も高く柔軟に対応できます。パーサもお手軽なものから、複雑大規模用まで色々あります。そのまま wget までしてもいいでしょう。

ding2
質問者

お礼

> サンプルに無いので問題あるかもしれませんが 具体的なサンプルがどんなものか分からない という意味でしょうか? https://okwave.jp/qa/q9361645.html こちらに一部分を載っけております。 専門知識を持った方というのは やはり凄いなと再確認いたしました。 実行してみましたが、確かに IsInstalled="true" のものが結果に含まれていないリストが 一瞬で生成されました。 ありがとうございました!!

  • trapezium
  • ベストアンサー率62% (276/442)
回答No.1

> ただ、結局やりたかったことは snip > wget http://hogehoge1 > wget http://hogehoge2 > と続いていくスクリプトを自動生成したいということです。 xmllint とかじゃ駄目なんですか? サンプルファイルだと、 echo 'cat /XMLOut/Check/Detail/UpdateData/References/DownloadURL/text()' | xmllint --shell foo.xml | sed '/^http/!d;s//wget &/' wget http://download.windowsupdate.com/msdownload/update/software/secu/2011/06/vcredist_x86_b8fab0bb7f62a24ddfe77b19cd9a1451abd7b847.exe wget http://download.windowsupdate.com/msdownload/update/software/secu/2011/05/vcredist_x64_a7c83077b8a28d409e36316d2d7321fa0ccdb7e8.exe

ding2
質問者

お礼

ありがとうございます。 xmlの知識がないものでして、おかげさまで助かりました。 これで手作業をすることなく一気にスクリプトを作れます。 それとすみません、書き忘れてました。 それぞれのアップデートが既に適用されているか否かで IsInstalled="true" IsInstalled="false" の2種類のラベルがありまして、 IsInstalled="false" のもののみを抜き出せるとさらにありがたいです。

関連するQ&A