我是XSLT新手,我不確定我是否正在使用正確的措辭來創建我在模板中創建的節點,而不是正在處理的節點。通過「當前模板節點」我的意思是a
在此塊:將模板應用到當前模板節點,而不是上下文節點?
<xsl:template match="item">
<li>
<a href="{location}">
<xsl:value-of select="title" />
</a>
</li>
</xsl:template>
我有,我想申請到a
另一個模板匹配:
<xsl:template match="a" mode="html">
<a href="{@href}" title="this{@title}">
<xsl:if test="number(substring(@href,1,4)='http')">
<xsl:attribute name="class">external</xsl:attribute>
<xsl:attribute name="target">_blank</xsl:attribute>
</xsl:if>
<xsl:value-of select="." />
</a>
</xsl:template>
我的問題是:是否有可能將此a
模板應用於我在item
模板中創建的a
模板,還是僅針對上下文節點進行匹配? (另外,爲了將來的搜索,你稱這種節點是什麼?)
感謝您的閱讀。
編輯:回覆@Jim Garrison詢問我的用例,上面的例子並不遙遠。我必須包括唯一的額外信息是節點集,我有工作,它看起來像:
<related-links>
<title>Link text</title>
<location>http://link-address.whatever</location>
</related-links>
的a
模板我有用於「外部」類應用,並放置在任何節點我的每一個環節正在處理爲HTML。我想重複使用這個特殊的related-links
模板。我能想到現在做的唯一事情是這樣的:
<xsl:template match="item">
<li>
<a href="{location}">
<xsl:if test="number(substring(location,1,4)='http')">
<xsl:attribute name="class">external</xsl:attribute>
<xsl:attribute name="target">_blank</xsl:attribute>
</xsl:if>
<xsl:value-of select="title" />
</a>
</li>
</xsl:template>
這似乎不必要的重複,特別是考慮到這是一開始,我相信它會變得更加複雜。這不是一件不尋常的事情要做...是否有其他方法我應該使用?
P.S. - 我使用的幻彩CMS依賴於這樣的libxslt沒有XSLT 2.0
謝謝你幫助我理解。我會嘗試使用命名模板 - 我很猶豫,因爲我讀過的所有內容都說'xsl:call-template'就是PHP程序員試圖使XSLT更像PHP一樣,並且'apply-templates'是正確的XSLT方法。我擴展了我的問題,新信息是否會改變您的答案? –
的確,您希望爲您的大部分控制流程使用xsl:apply-templates。替代方案是在多個模板中複製代碼時,請使用xsl:call-template。 –