2016-05-11 7 views
0

私はxmlをhtmlに変換しようとしています。酸素とXPathは、以下のような: saxon cliと酸素の不一致

<a href="#cite{count(preceding::citation) + 1}"> 
    <xsl:value-of select="count(preceding::citation) + 1"/> 
</a> 

は、基本的にこれの目的は、先行参照の数に基づいて、番号の参照リンクを挿入することです。

これは酸素に変換したときに機能します。

コマンドラインから実行すると、すべてのリンクの出力は1になります。

java -jar /usr/share/java/saxon9he.jar -s:report1.xml -xsl:test.xsl -o:output4.html -t 

私も試してみましたsaxon9ee:すべてのヘルプは高く評価され

java -cp /usr/share/java/saxon9ee.jar com.saxonica.Transform -s:report1.xml -xsl:test.xsl -o:output3.html -t 

コマンドラインは、アイブ氏は次のようになり試みたコマンド!

test.xslはここで見つけることができます
http://pastebin.com/6qZeEgD8
report1.xml
http://pastebin.com/5SMY8c7W
contentconfig.xmlここ
http://pastebin.com/A2etm4Cr

-t出力されます。

Saxon-HE 9.7.0.4J from Saxonica 
Java version 1.7.0_79 
Stylesheet compilation time: 1.59928s (1599.280903ms) 
Processing file:/root /CRIReportProject/cpreport.xml 
Using parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser 
Building tree for file:/root/CRIReportProject/cpreport.xml using class net.sf.saxon.tree.tiny.TinyBuilder 
Tree built in 1.296529ms 
Tree size: 27 nodes, 54 characters, 5 attributes 
URIResolver.resolve href="contentconfig.xml" base="file:/root/CRIReportProject/cptest.xsl" 
Building tree for file:/root/CRIReportProject/contentconfig.xml using class net.sf.saxon.tree.tiny.TinyBuilder 
Tree built in 3.144498ms 
Tree size: 28 nodes, 161 characters, 6 attributes 
Execution time: 131.347609ms 

メモリ使用します:8428592

+0

名前空間の問題である可能性があります.Saxonはこれを正しく処理する可能性が非常に高いです。あなたのソースには 'citation'要素が属しているかもしれない名前空間宣言がありますか? – Flynn1179

+2

問題を再現できるように最小限の完全なサンプルを投稿できますか?どのバージョンのSaxon 9がそうであるか、 '-t'は何を表示しますか? –

+0

また、 'xsl:number'命令を調べます。確かに言うのは難しいですが、先行するノードの数をカウントする代わりに大きな文書にはあまり効果的ではありません。 – Flynn1179

答えて

1

テンプレートルールでmatch = "method"を使用してcount(preceding::citation)を実行しており、評価のコンテキスト項目が文書report1.xml<method>要素です。このドキュメントには<citation>要素が含まれていないので、count(preceding::citation)はゼロを返す必要があります。周囲の<xsl:if>は他の文書contentconfig.xmlを見ていますが、その文書へのコンテキストは変更されません。おそらくxsl:ifxsl:for-eachに変更する必要がありますが、どちらのソースドキュメントにも存在しないsup/a/@idなどの要素もコードで探しているため、他の変更も行う必要があります。

なぜこのコードがoXygenで異なる動作をするのかわかりません。

xsl:ifをxsl:for-eachに変更すると、おそらくcount(preceding::citation)+1position()に変更することができます。これはずっと効率的です。

+0

oxygenXMLで動作するように見える理由は、contentconfig.xmlファイルがreport1.xmlではなくtransformにリンクされていることです – syntax