2011-01-20 3 views
2

Xslt 2.0で変換したいxml(JUnitテスト結果)がたくさんあります。XSLT変換を改善する

私は現在、xmlファイルを検索するために、私のXSLTで変換 とfn:collection() を実行するためにnet.sf.saxon.TransformerFactoryImplを使用しています。

<xsl:variable name="files" select="collection('file:///Users/admin/Documents/testxml/?select=*.xml;recurse=yes')"/> 

<xsl:template match="testsuites"> 
<root> 
<xsl:for-each select="$files//testsuites"> 
    <xsl:call-template name="summary"/> 
</xsl:for-each> 
</root>   
</xsl:template> 

私に迷惑を2点があります:このよう

  • 最初はJavaの変圧器であるが、私は、XML「ソース」を渡すために持っていますが、私は私のために本当に必要いけません。 xslはxmlの検索とリスティングを行っています。

  • 秒は、10(多分8または7)xmlの変換を実行しているときにJVMのヒープスペースがいっぱいです。私はヒープサイズを上げることができることを知っていますが、私はトランスフォームをほぼ300 xmlに適用しなければならないので効率的ではありません。

xmlの数を改善するために何ができるのですか?

おかげ

EDIT:

私はこのようなsaxon:discard-document()を使用しようとしているM:

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:saxon="http://saxon.sf.net/"> 
    <xsl:output method="xml" indent="yes"/> 

<xsl:variable name="files" select="collection('file:///Users/admin/Documents/testxml/?select=*.xml;recurse=yes')"/> 

<xsl:template match="testsuites"> 
<root> 
    <xsl:for-each select="for $x in ($files//testsuites)return saxon:discard-document($x)">  
    <xsl:call-template name="summary"/> 
    </xsl:for-each>  
</root>   
</xsl:template> 

が、私はまだ私のヒープ領域でのエラーを取得しています。私は何か間違っているのですか?

+0

Dr. Kay、Saxonの著者は、実際に下記に答えました。 Saxon関連の質問で最も良い結果を得るには、 'saxon-help @ lists.sourceforge.net'がより良いリソースであることがわかります。 Kay博士とAndrew Welch博士(そのブログの著者)は、そこで活躍しています。 – lavinio

答えて

4

あなたはサクソンにソースオブジェクトを渡す必要はありません:あなたは、名前付きテンプレートに変換を開始することができます。ただし、これはJAXP API(XSLT 1.0のみを認識します)ではサポートされていません.Saxonの機能を最大限に活用するには、s9apiインターフェイスに切り替えることをお勧めします。

saxon:discard-document()については、これまでにどれくらい手に入れているのかスレッドに従うことはできません。一連の文書をグローバル変数に入れないでください。代わりに、

<xsl:for-each select="collection(....)/saxon:discard-document(.)//testsuites"> 
    ... 
</xsl:for-each>