문제

변수의 "현재"값이 다른 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 가져온 스타일 시트의 변수는 전혀 직접 사용되지 않습니다..

다른 팁

원하는 것을 직접 할 수 없으며 두 번째 변수를 설정해야합니다.

그러나 의도를 이해할 수 없습니다. 이것이 템플릿 기반이라면 모든 매개 변수에 기본값을 제공 할 수 있습니다 (변수와 매우 유사하게 작용). 당신이 질문을 표현하는 방식은 그것이 나에게 올바른 접근법임을 암시하지만,이 템플릿이 어떻게 관련되고 사용되는지 명확히 할 수 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top