私は XSLT の第一人者ではなく、同様の例をオンラインで見つけることができませんでした。複数のファイルからアプリのリストを検索に使用できる単一の変数にまとめたいと思います。
基本的に、元の変数宣言を新しいものに置き換えると、XSLT はそれを気に入りません。変数の内容をファイルに出力しましたが、それらは XML 要素のフォーマットが同じであるため、変数にリンクされたメタデータのどこかに失敗しているに違いありません。
すべてのファイルの XML 要素形式
<include-application name="appname" type="blah"/>
元の変数
<xsl:variable name="applications" select="board/packaging/*/include-application"/>
新しい変数定義
<xsl:variable name="applications">
<xsl:copy-of select="board/packaging/*/include-application"/>
<xsl:for-each select="board/packaging/applications/include">
<xsl:variable name="appset" as="xs:string" select="@name"/>
<xsl:variable name="includefile" as="xs:string" select="concat('../share/appsets/', $appset, '.xml')"/>
<xsl:copy-of select="document($includefile)/applications/include-application"/>
</xsl:for-each>
</xsl:variable>
次に、要素にアクセスして何かを選択しようとすると、新しい変数定義で失敗します (39 行目は下のブロックの最初の行です)。
<xsl:variable name="type" select="$applications[@name = $appname]/@type"/>
<xsl:variable name="appid" select="$app-names/application-package-name[@name = $appname]/appid[@type = $type]/@value"/>
XPath エラー: 無効な型のランタイム エラー: ファイル xslt/blah.xslt 行 39 要素 variable 変数 'type' の式を評価できませんでした。
ありがとう
デビッド