2017-08-24 4 views
0

私は研究しており、XSLTの最適化に関連するものは何も見つかりませんでした。以下は私が取り組んでいるスニペットであり、xslt変換に役立つことがあれば見たいと思っています。XSLT最適化xsl:chooseとstr:tokenize

<xsl:template match="a:OBR/*"> 
    <xsl:choose> 
     <xsl:when test ="name() = 'OBR-10' and string-length(.) = 0"> 
     <OBR-10>USER</OBR-10> 
     </xsl:when> 
     <xsl:when test ="name() = 'OBR-18'"> 
     <OBR-18> 
      <xsl:value-of select ="//a:PV1/a:PV1-44"/> 
     </OBR-18> 
     </xsl:when> 
     <xsl:when test ="name() = 'OBR-19'"> 
     <OBR-19> 
      <xsl:if test = "string-length(str:tokenize(../a:OBR-18,'^')[5]) &gt; 0"> 
       <xsl:value-of select ="str:tokenize(../a:OBR-18,'^')[5]"/> 
      </xsl:if> 
     </OBR-19> 
     </xsl:when> 
     <xsl:when test ="name() = 'OBR-33'"> 
     <OBR-33> 
      <xsl:value-of select ="translate(../parent::a:ORC[1]/a:ORC-4,'^','~')"/> 
     </OBR-33> 
     </xsl:when> 
     <xsl:when test="name()='NTE'"> 
     <NTE> 
      <xsl:apply-templates/> 
     </NTE> 
     </xsl:when> 
     <xsl:when test="name()='DG1'"/> 
     <!--<DG1> 
      <xsl:apply-templates/> 
     </DG1> 
     </xsl:when>--> 
     <xsl:when test="name()='OBX'"> 
     <OBX> 
      <xsl:apply-templates/> 
     </OBX> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:copy-of select="."/> 
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:template> 

答えて

0

私は

<xsl:template match="a:OBR/OBR-10[string-length() = 0]"> 
    <xsl:copy>USER</xsl:copy> 
</xsl:template> 

または多分

<xsl:template match="a:OBR/OBR-10[. = '']"> 
    <xsl:copy>USER</xsl:copy> 
</xsl:template> 

として

<xsl:template match="a:OBR/*"> 
    <xsl:choose> 
     <xsl:when test ="name() = 'OBR-10' and string-length(.) = 0"> 
     <OBR-10>USER</OBR-10> 
     </xsl:when> 

のようなコードを書くことを示唆し、そのことによって、各要素に一致するテンプレートを記述すること、です名前と、必要に応じて述語/ cその代わりに*に一致させて、その名前をテストしてください。私は必ずしも最適化(特定の実装で測定する必要がある)としてではなく、明確でモジュラーなコーディングスタイルとして見ています。

<xsl:otherwise> 
    <xsl:copy-of select="."/> 
    </xsl:otherwise> 

は、その後、既に開始し、処理を維持するための出発点として設定恒等変換テンプレートによって覆わ

<xsl:template match="a:OBR/*"> 
    <xsl:copy-of select="."/> 
</xsl:template> 

又はおそらくコードであろう。

ネームスペースに関して正確な提案ができるようにするには、入力文書とXSLTにネームスペースを表示する必要があります(希望/必要がある可能性がありますxsl:template match="a:OBR/a:OBR-10[string-length() = 0]")。

+0

ありがとうございますMartin私は2つの異なるオプションをどのように測定しますか? – Mcdevitt

+0

これは、XSLTプロセッサと使用するホスト環境によって異なりますが、処理時間やメモリ消費などのパフォーマンス関連のデータを直接出力するオプションがあるかどうか、またはホスト言語に切り替える必要があるかどうかを確認する必要があります。 Java、C、C#など)を使用してXSLTを実行し、XSLT変換の時間を計測するためのコードを記述します。いずれにしても、XSLTを実行する際に問題が発生した場合は、その作業を行うだけで構いません。 –

+0

Mcdevitt