質問
「現在」の内容を確認できるようにする必要があります。変数の値は、他を含む異なるxsltの同じ変数の再宣言内にあります。
main.xslt:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="other.xslt"/>
<xsl:variable name="email">
<xsl:if test="string-length($email) = 0">
bar@foo.com
</xsl:if>
</xsl:variable>
<xsl:template match="/">
<Email>
<xsl:value-of select="$email"/>
</Email>
</xsl:template>
</xsl:stylesheet>
other.xslt:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="email">foo@bar.com</xsl:variable>
</xsl:stylesheet>
私がやりたいのは、優先順位の低い変数の値を確認して、現在のxsltの変数で上書きする必要があるかどうかを確認できるようにすることです。 (免責事項-現在のコードはひどくクラッシュします)
解決
他の人が指摘したように、インポートされたスタイルシートで定義されているグローバル変数にデフォルトを追加することは、同じ変数名を使用して行うことはできません。これは、現在のxsltスタイルシートで定義されているその名前の変数は、インポートされたスタイルシートの変数よりも優先順位が高く、前者のみが使用されるためです(優先順位の低いスタイルシートで同じ名前の変数にアクセスすることはできません)。
デフォルトを追加する方法は次のとおりです:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- -->
<xsl:import href="other.xsl"/>
<!-- -->
<xsl:variable name="vMyEmail" select=
"concat(substring('bar@foo.com', 1 div not($vEmail)), $vEmail)"
/>
<!-- -->
<xsl:template match="/">
<xsl:value-of select="$vMyEmail"/>
</xsl:template>
</xsl:stylesheet>
注グローバル変数 $ vMyEmail
は、変数 <の値を持つように定義されていることに注意してくださいcode> $ vEmail (インポートされたスタイルシートで定義)これが長さ1以上の文字列である場合、または必要なデフォルト値-それ以外の場合。
この手法を使用すると、その定義に続いて、そのように定義された $ vMyEmail
を使用します。インポートされたスタイルシートの $ vEmail
変数は直接使用されません。
他のヒント
直接やりたいことはできません。2番目の変数を設定する必要があります。
しかし、私は意図を理解できません。これがテンプレートベースの場合、任意のparam(変数と非常によく似た動作をする)にデフォルト値を指定できます。あなたが質問を表現する方法は、それが私にとって正しいアプローチであることを示唆していますが、これらのテンプレートがどのように関連し使用されているかを明確にできますか?