문제
변수의 "현재"값이 다른 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>
기타 .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
변수의 값을 갖는 방식으로 정의됩니다. $vEmail
(수입 스타일로 정의 됨) 길이가 1 이상인 문자열이거나 원하는 기본값 인 경우 (그렇지 않으면).
이 기술을 사용하면 SO 정의를 사용합니다. $vMyEmail
그 정의에 따라 어디서나. 그만큼 $vEmail
가져온 스타일 시트의 변수는 전혀 직접 사용되지 않습니다..
다른 팁
원하는 것을 직접 할 수 없으며 두 번째 변수를 설정해야합니다.
그러나 의도를 이해할 수 없습니다. 이것이 템플릿 기반이라면 모든 매개 변수에 기본값을 제공 할 수 있습니다 (변수와 매우 유사하게 작용). 당신이 질문을 표현하는 방식은 그것이 나에게 올바른 접근법임을 암시하지만,이 템플릿이 어떻게 관련되고 사용되는지 명확히 할 수 있습니까?