拡張子が一意でないときの makeコマンドの使い方

このQ&Aのポイント
  • 自動化のためにMakefileを使用してXMLファイルを変換する方法について質問しています。
  • 要約: 質問者は、msxslコマンドを使用してXMLファイルを変換するためのMakefileを作成しようとしています。しかし、特定のファイルのみを対象にすることができず、全てのファイルが変換されてしまいます。
  • 要約: 質問者は、Makefileの記述方法を知りたいと思っています。
回答を見る
  • ベストアンサー

拡張子が一意でないときの makeコマンドの使い方

XMLファイルをmsxsl.exeコマンドを使用して変換する操作を、自動化したいと考えています 更新したものだけを対象とするために、makeコマンドを使おうと Makefile を書いていますが、てこずっています。 目的として、XML1.xml、XML2.xml、XML3.xmlを、HTML化するスタイルシートHTML.xslがあり、 msxsl XML1.xml HTML.xsl -o XML1.html として変換します。 また、3つのXMLファイルを結合したKetsugouXML.xml、そこからある種の集計XMLファイル化するスタイルシートmatome.xslがあり、 msxsl KetsugouXML.xml matome.xsl -o matome.xml として変換します。 これらの自動化のために以下のようなMakefileを書きました。 XML = XML1.xml XML2.xml XML3.xml MATOME_XML = matome.xml HTML = $(XML:%.xml=%.html) HTML_ALL = $(XML:%.xml=%.html) $(MATOME_XML) all: $(HTML_ALL) $(HTML) : $(XML) msxsl $< HTML.xsl -o $@ # ↑1個めのファイル名しか得られない # msxsl $(@:%.html=%.xml) HTML.xsl -o $@ # ↑更新したXMLファイル以外も全て実行されてしまう $(MATOME_XML) : $(XML) msxsl KetsugouXML.xml matome.xsl -o $@ 問題は、上のコメント行に書いた通りですが、 msxsl $< HTML.xsl -o $@ と書いた場合、実行結果が、 msxsl XML1.xml HTML.xsl -o XML1.html msxsl XML1.xml HTML.xsl -o XML2.html msxsl XML1.xml HTML.xsl -o XML3.html となり、入力ファイル名が変わりません。 次に、 msxsl $(@:%.html=%.xml) HTML.xsl -o $@ とした場合、 msxsl XML1.xml HTML.xsl -o XML1.html msxsl XML2.xml HTML.xsl -o XML2.html msxsl XML3.xml HTML.xsl -o XML3.html と期待の結果かと思ったのですが、 ソース1個を更新しただけでも全ての変換がかかってしまいます。 (ちなみに、集計XMLファイルの生成は正常にできています) このような場合、どのように Makefile を記述すべきでしょうか? 補足: 自分の経験としては、C言語やTeXで make を使ったことはありましたが、 この場合C言語と異なり、一意に .c → .o とはならないこと、 同じソース(.xml)からでもスタイルシートを変えることで、異なる変換結果ファイル(.htmlだったり、.xmlだったり)になるところの記述方法の不理解が原因であろうと 思っています。 環境は Windows10、GNU Make4.1 を使っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.2

>できれば複数の変換パターンがある場合についても >おしえていただけませんでしょうか? 補足に書かれているように.xmlから.htmlへの変換パターンが複数ある場合ですよね? 元になるファイルのあるディレクトリや出力先ディレクトリが異なるなど区別できるものがあればできなくはないですが、 そうでないなら静的型ルールやサフィックスルールで行うのは無理です (あなただってXML1.xml,XML2.xml,XML3.xmlにはHTML.xslを使って、XML11.xml,XML12.xml,XML13.xmlにはHTML2.xslを使って変換するという事を知らなかったらできないですよね?)。 ですので、やるとするなら ・上にもあげているようにルール毎にファイルを置く場所を変えるなど区別できる何かを用意する ・静的型ルールなどを用いずに変換するルールを全て書く(ただしユーザー定義関数を用いることで簡略化することはできる) あたりになります。

hzd00430
質問者

お礼

早速のご回答、ありがとうございました。 そのままでは無理なのですね。 「ルールをすべて書く」方法(及びその簡略化)について 試してみることにします。

その他の回答 (1)

  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.1

all: XML1.html XML2.html XML3.html matome.xml %.html: %.xml <tab>msxsl $< HTML.xsl -o $@ XML1.html: XML1.xml XML2.html: XML2.xml XML3.html: XML3.xml matome.xml: KetsugouXML.xml <tab>msxsl $< matome.xsl -o $@ でできませんか?(変数使うようにするのはご自分でどうぞ)

hzd00430
質問者

お礼

ありがとうございます。できました! できれば複数の変換パターンがある場合についても おしえていただけませんでしょうか?

hzd00430
質問者

補足

これに加え、別のスタイルシートで変換するグループXML11.xml、XML12.xml、XML13.xmlがある場合はどうすればよいでしょうか? msxsl XML11.xml HTML2.xsl -o XML11.html

関連するQ&A

  • msxslで「不明な方法」エラー

    msxslで、xmlからhtmlの変換をしたいと思っています。 試しに 「msxsl xmlファイル名 -pi」 と打ったのですが、 ----- Code: 0x80004005 不明 な方法です。 -->processing-instruction('XML-stylesheet'<--) ----- と出て変換されません。 「msxsl xmlファイル名 xslファイル名」 では変換されましたが、xmlファイル内のhref属性からxslファイルを読み取りたいと思っています。 xmlファイルの先頭には <?xml version="1.0" encoding="Shift_JIS"?> <?xml-stylesheet type="text/xsl" href="xslファイル名"?> を記述しています。 googleで検索して同じような症状は見つけたのですが、リンク先が消えていて見れませんでした。 もう一つのリンク先に難しいプログラムが書いてありましたが、意味が分からず挫折しました。 ご存知の方いたら教えてください。

    • ベストアンサー
    • XML
  • XML → HTML の確認方法

    閲覧ありがとうございます。 まったくの初心者で、かなり初歩的なことだと思うのですが質問させていただきます。 XML文書についてなんですが、Web上でHTMLとして確認したいのですが、それができなくて困っています。泣 XMLの知識がまったくなかったので、色々調べてみたのですが、結果 XML + XSLスタイルシート → HTMLに変換されてWeb上でみれる・・・ということが分かりました。 また、その変換に processorが必要・・・ということも分かりました。 パソコン内にXSLスタイルシートを発見し、HTMLに変換するのに、Easy XSLT processortというのもダウンロードしてみたのですが、使いたかがよくわからず、使えずにいます・・・泣。 また、XML文書につきましては、あるツールを使って簡単に作成しているのでXML文書についての知識は本当にありません。XSLスタイルシートももともと入っていたものなのでよくわかりません。 XML文書もXSLスタイルシートもあるので、このEasy XSLT processorがうまく使えればWeb上でうまく表示されると思うのですが、どのようにすればいいのでしょうか(><)? XMLの部分にXML文書のファイルを、XSLの部分にXSLスタイルシートのファイルを選択しているのですが、毎回「オートフォーメーションサーバーはオブジェクトを作成できません」「undifindはNullまたはオブジェクトではありません」と言われて、終了してしまいます。 本当に初歩的なことでごめんなさい。 長文を読んで下り、ありがとうございます。ご回答お待ちしております。 (補足) 今までWindowsXPを使用しておりまして、作成したXML文書をクリックするだけでWeb上で文書が表示され、確認することができてたのですが、最近Windows7にかわってから、作成したXML文書をクリックしてもWeb上でうまく表示されなくなってしまいました(><)。 見られなくなった、というよりは、今まで表のように見れていたものが、ずらずら~とした単なる文字の羅列になってしまいました。泣 もしprocessorうんぬんの問題ではない場合も、ご指摘いただけると幸いです。

    • 締切済み
    • XML
  • XSLで特定のタグだけを出力する方法

    もうすぐクリスマスなのに、むなしく質問をさせて頂きます。 XSLスタイルシートを使って、XML文書をHTML文書に変換することを今試して みているのですが、<name>myrimyri</name>というタグがあるとして、 そのタグの内容だけ表示しないようにしたいんです。どうすればいいですか? もっと分かりやすい例として、 <root> <name>myrimyri</name> <age>20</age> <root> というxml文書があるとして、それを以下のHTML文書に変換したいです。 (ageのタグ内容だけを表示したい。) <html> <body> 20 </body> </html> そのXSL文を教えて下さい。お願いします。

    • ベストアンサー
    • XML
  • xsl:chooseでこんなことがしたい

    はじめまして。XML初心者です。 元データとなるXMLを読み込んでHTML変換する為のスタイルシートの作成を試みています。 xsl:chooseを使って以下のようなことがしたいのですが、 ご存知の方いましたら教えてください(xsl:chooseに拘りはありません) ・元データの基本構造 ------------------------------------------------------ <A> <B> <C1>てすと</C1> </B> </A> ------------------------------------------------------ ・やりたいこと  <C1>の要素内容がNULLなら"★"マークを表示したい。 作ったスタイルシート ------------------------------------------------------ ~ <xsl:choose> <xsl:when test="C1=''">★</xsl:when> <xsl:otherwise><xsl:value-of selct="C1"/></xsl:otherwise> </xsl:choose> ~ ------------------------------------------------------ という感じで試したらうまく”★”マーク表示ができたのですが、対象のXMLデータに例外があり、 <C1>以下の要素がない場合があったのです。 この例外でも同様の”★”表示させたいのですが、うまい方法ご存知の方いましたら教えてください。

    • ベストアンサー
    • XML
  • XMLからHDMLを生成したいのですが・・・。

    XMLからXSLスタイルシートを使って、携帯Webコンテンツ用のソースを生成したいのですが、そのようなスタイルシートのサンプルコードはないでしょうか? また、HDML・HTML両方に対応できるようなXMLのサンプルはないでしょうか? もしあればURLおよびソースのどちらでもかまいません。教えてください。

    • 締切済み
    • XML
  • サーバー側で、XML,XSLを整形されたファイルを出力する方法?

    XMLについて、理解が浅いのですが ローカルでは XMLファイルとXSLファイルがあれば、 sabcmdを使えば、変換できますが、 例えば、WEB(CGI:Perl)でサーバーに XML,XSLファイルが合った場合に どのようにクライアント(ブラウザ)に出力させれば良いのでしょうか? サーバー側でxmlファイルとxslファイルを sabcmdで変換させて、結果を読み込んで出力させるのが筋でしょうか? いまいち理解していなくて済みません。

    • ベストアンサー
    • Perl
  • XSLスタイルシートを2つ当てる方法はありませんか?

    XSLスタイルシートのテンプレートが多すぎて 訳がわからなくなってしまいました。 できれば他のプログラミング言語のように、部品でXSLファイルを分けたいのですが、XSLではできないのでしょうか? 「XML/XSL以外のプログラムを利用して」という回答は、なしでお願いします。 よろしくお願いします。

    • ベストアンサー
    • XML
  • LinuxでXMLを静的にHTMLに変換

    こんにちは。 XSLTを使い、XML文書を静的にHTMLに変換するツールを探しています。 WindowsのMSXSL.exeみたいなやつで... できれば、シェルから引数でXMLファイル名、XSLTファイル名、出力ファイル名とオプションを指定して変換する、くらいのものがいいです。 それとも、Perlのスクリプトか何かでありますでしょうか? よろしくおねがいします。

    • ベストアンサー
    • XML
  • XMLのスタイルシートで単独タグを発見したい

    こんにちは XMLファイルをブラウザで見やすく表示するためにスタイルシートを使っているのですが、XMLファイル中に登場する単独タグを見つけて、その部分で改行するスタイルシートの書き方がわかりません。 XML中に <LineBreak />という単独タグが登場した場合に HTML出力として <br />を入れたいのです。 スタイルシートはどのようにしたらよいでしょうか?

    • ベストアンサー
    • XML
  • XMLの名前空間をXSLから指定する方法

    XML勉強してみて間もない者の質問です・・よろしくです。 XMLで例えば <oyaji:samp xmlns:oyaji="http://sampsampsamp.co.jp"> </oyaji:samp> と宣言したとすると、XSLスタイルシートファイルではどのように oyaji:samp を識別すればいいのでしょうか。 上記で質問内容の分からなかった方のみ以下読んでください・・ 例えば //templating.xsl <?XML宣言?> <xsl:stylesheet xmlns:xsl="スタイルシートURI"> <xsl:template match="/"> <xsl:apply-templates /> </xsl:template> <xsl:template macth="samp"> </xsl:template> </xsl:stylesheet> とあったとすると、sampにはマッチしませんよね。 それをマッチさせる方法を教えてください。

    • ベストアンサー
    • XML