Perlを使用してXSLT 1.0変換を実行しようとしています。私はここにsolutionをスクリプトとして使用しています。xslファイルから別のxslファイルへの変数がありません
私の入力xmlファイルは、これと少し似ています。
<?xml version="1.0" encoding="UTF-8" ?>
<bsg>
<msg>
<entry key="testingString">This is a test.</entry>
<!-- <trs> This is me, trs!!! </trs> -->
</msg>
</bsg>
trs
属性は、他のすべてのノードentry
にその常に存在していないことを意味オプションです。 エントリは、Perlスクリプトに
<entry key="Doctor" tslate="false">Physician.</entry>
のようなものを持つことができ、私は(たとえばファイルの二つの他のXSLTファイルをインポートXSLTファイルを供給true
かfalse
すなわち、入力XMLファイルを指定でき、オプションのプロパティtslate
を持つことができますおよびファイルB)には、変数とテンプレートが定義されています。
ファイルAは、入力XMLファイルからノードを読み取り、次の操作
<xsl:param name="isOTHERFILEavailable"/>
<xsl:variable name="tvariables">
<xsl:choose>
<xsl:when test="$isOTHERFILEavailable = 'true'">
<xsl:copy-of select="document($OTHERTHE_File)/bsg/msg"/>
</xsl:when>
</xsl:choose>
</xsl:variable>
isOTHERFILEavailable
を行うOTHERFILE
が存在するか否かを検証するのPerlファイルから渡された文字列パラメータです。
このtvariables
は、
<xsl:template match="msg">
<xsl:variable name="trsExists">
<xsl:for-each select="entry">
<xsl:variable name="current_key" select="@key"/>
<xsl:variable name="trsMatch" select="$tvariables/msg/entry[@key = $current_key]"/>
<xsl:choose>
<xsl:when test="$trsMatch and normalize-space($trsMatch/text) = normalize-space(.) and (not(@tslate) or @tslate = true())">
<xsl:copy>
<xsl:copy-of select="$trsMatch/@key|$trsMatch/tvariables/text()|@context"/>
</xsl:copy>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:variable>
</xsl:template>
以下のようにファイルB内の他の操作を実行するためにアクセスされた私の問題は、ある私は、この行に到達すると、次のように
<xsl:variable name="trsMatch" select="$tvariables/msg/entry[@key = $current_key]"/>
Perlのエラーアウト
Invalid type runtime error: file B.xslt line # element variable Failed to evaluate the expression of variable 'tvariables'
明白なものがありませんか? =>すべて
P.Sは同じでXSLT 2.0(サクソン)とを使用して、Javaから変換実行すると正常に動作tvariables
が定義されていない場合でも、isOTHERFILEavailable
がfalse
あるとき、それはあります。
'$ OTHERTHE_File'と' document($ OTHERTHE_File)/ bsg/msg'はどうやって渡されるのでしょうか?おそらく、$ OTHERTHE_Fileを見つけるのがパスの問題でしょうか?それは完全なパスですか? –
@StefanHegny ..はい、指定されたパスは完全修飾パスです。 'OTHER_File'は常に存在するとは限りません。私はなぜjavaの変換がうまくいくのだろうかと思います。 – Recker
あなたの質問タイトルは何か「xsltファイルから別のファイルに」何かを示唆していますが、2つのxsltsが関係していますか?どのように "結合"されていますか? –