2012-01-13 6 views
3

私のxslはhttp://www.xmlper.com/で作業しています(他のstackoverflowコメントからの素晴らしいツールの推奨)。xsltproc(osx) "スタイルシートではなく、コンパイルエラーです"。 xmlとxslはどちらもオンラインツールで動作します

が、私は同じことを実行します(現在は非常にストリップダウン)私のMac OS XのコマンドラインでXML & XSL私が手に「コンパイルエラーを、ドキュメントはスタイルシートではありません」

が、それはバージョンの問題(出力です以下のxsltprocの)?私は最新のMac(10.7)と最新のxcode 4.2(xmlのlibなどを保証するために)を実行していますか? xslt v2.0をサポートしていないxsltprocについて何も見つかりませんでした。(私はv1.0に設定しようとしました - 違いはありません) 他のxsltプロセッサー(saxonなど)をダウンロードしようとしましたが、プログラムを実行させないでください。

誰かがこれを見つけて解決したことを願っています! おかげ

ベン

入力xmlファイル

<?xml version="1.0" encoding="utf-8"?> 
<resultsfile> 
    <planset> 
    <voicemail_divert> 
     <cost_over_plan>0</cost_over_plan> 
     <this_txn_absolutely_cost_subtotal>0</this_txn_absolutely_cost_subtotal> 
    </voicemail_divert> 
    </planset> 
</resultsfile> 

XSL

<?xml version="1.0"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 
<xsl:output method="xml"/> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 
    <xsl:template match="cost_over_plan"> 
    <xsl:copy> 
    <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    <extracost_overplan_aspartoftotal>0</extracost_overplan_aspartoftotal> 
    <extraqty_overplan_aspartoftotal>0</extraqty_overplan_aspartoftotal> 
</xsl:template> 
</xsl:stylesheet> 

エラー

$ xsltproc --debug --novalid --nonet f.xml add_extraqtyandcostfields.xsl 
compilation error: file f.xml line 2 element resultsfile 
xsltParseStylesheetProcess : document is not a stylesheet 

バージョン情報

$ xsltproc -version 
Using libxml 20703, libxslt 10124 and libexslt 813 
xsltproc was compiled against libxml 20703, libxslt 10124 and libexslt 813 
libxslt 10124 was compiled against libxml 20703 
libexslt 813 was compiled against libxml 20703 
+0

'f.xml'と' add_extraqtyandcostfields.xsl'の位置をコマンドラインで入れ替えてみましたか? ( 'xsltproc --debug --novalid --nonet add_extraqtyandcostfields.xsl f.xml') –

答えて

4

、スタイルシートをxsltprocのの引数でXMLファイルをpreceedする必要があります。

$ xsltproc --debug --novalid --nonet add_extraqtyandcostfields.xsl f.xml 

は動作するはずです。

また、xsltprocはXSLT 2.0をサポートしていないようです。幸いにも、あなたのスタイルシートはnew XSLT 2.0 featuresを必要としていないようです。 <xsl:stylesheet version="2.0"<xsl:stylesheet version="1.0"に置き換えて問題を解決することができます。

+0

ありがとうphihag - 私はばかみたいに感じますか? – Ben

+0

@Ben問題はない、誰もが時々明白なことを忘れる。もう1つ:この(または別の)回答があなたの問題を解決する場合は、[受諾](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)を考慮してください。 – phihag

1

あなたは、XSLT 2.0変換を持っていますが、使用するXSLTプロセッサ(libxsltの)唯一のXSLT 1.0をサポートしています。

解決策の1つは、XSLT 1.0変換を使用することです。これは、現在の変換で使用されるXSLT 2.0の機能に応じて、軽微な変更から重大な変更が必要な場合があります。

Iが提供XSLTコードにも単一XSLT 2.0の機能が表示されない - 従ってちょうど2.0から1.0version artttibuteの値を変更すると、観察されたエラーを解消できます。 manpageに記載したよう

+0

少なくとも理論的には、XSLT 1.0プロセッサーに提出されたスタイルシートでversion =" 2.0 "と言うのは誤りではありません。規格は、プロセッサがこの場合にどのように動作すべきかを定義する(順方向互換モードで動作する)。これは、他の多くのXSLT 1.0プロセッサではうまく実装されていないことが知られています。それがここの問題の原因だとは思わない。私は問題がコマンドラインの構文だと思う。 –

+0

@Michael Kay:あなたはおそらく正しいでしょう - これが私が言った理由です: "*観察されたエラーを排除するかもしれない"。 –

関連する問題