저는 XSLT에서 mode 속성을 사용하는 법을 배웠고 xsl : if 문과 같이 템플릿 내에서 테스트 할 수있는 방법이 있는지 궁금합니다. 나는 그것이 xsl : template 레벨에서 사용되는 것을 보았을 뿐이며, 아마도 그것이 유일한 방법 일 것입니다. 나는 "../"경로 속성 (@href) 앞에 추가 할 수 있지만, 말 경우에만 모드 = "인쇄"제가 적용 템플릿을 함께하고, 모드없이 전화 드렸습니다xsl : if 테스트에서 모드를 사용할 수 있습니까?
<xsl:template name="object" mode="#all">
<img>
<xsl:attribute name="src">
<xsl:if test="mode='print'"><xsl:text>../</xsl:text></xsl:if>
<xsl:value-of select="@href"/>
</xsl:attribute>
</img>
</xsl:template>
= "print"는 다양한 다른 템플릿에서 설정됩니다.
물론 mode = "print"로 새 템플릿을 만들 수 있지만 두 개의 템플릿을 유지해야합니다.
아니면 더 좋은 방법이 있을까요? 도와 주셔서 감사합니다. - 스콧
은
어떤 프로세서
다음을 BE- 수있는 한 가지 방법은 당신이 작업하는? Saxon 인 경우 [saxon : current-mode-name()]이라고하는 Saxon 확장이 있습니다 (http://www.saxonica.com/documentation9.4-demo/html/extensions/functions/). currentmode.html). 불행히도, 그것은 Saxon에서 사용할 수 없습니다. –
두 개의 템플릿이있는 것이 정확히 무엇입니까? 기능을 복제하지 않고 작성하지만 하나는 일반이고 다른 하나는 경로 접두사가있는 매개 변수로 첫 번째를 호출하는 것이므로 나쁘지는 않습니다. –
내 템플릿이 복잡 할 수 있으며 하나의 변형 만 있으면 두 템플릿을 유지 관리하는 것이 비효율적 인 것처럼 보입니다. 예를 들어 select = "@ href"를 = "@ id"로 변경하기로 결정한 경우 두 곳에서해야합니다. 이것은 간단한 예입니다. 그러나보다 복잡한 구조로 인해 지저분해질 수 있습니다. –