[XSLT] 讓 XSLT 拜訪每一個子節點,根據節點名稱做不同動作

[XSLT] 讓 XSLT 拜訪每一個子節點,根據節點名稱做不同動作

承繼上一篇 讓 XML schema 允許 XML 中的元素多次出現

原本我們的 XSLT 是用下面的方式來拜訪 event 下所有的 keyword 元素:

<xsl:for-each select="event/keyword">
    <xsl:variable name="keyword" select="text()" />
    <xsl:if test="starts-with($text, $keyword)">
        <xsl:value-of select="$keyword" />
    </xsl:if>
</xsl:for-each>

 

但現在 event 下可能會有 keyword 或是 except,

假設我們想要拜訪所有 event 下的子節點,

然後根據它是 keyword 或是 except 來決定要做什麼事的話,

可以在 select 的地方將 “event/keyword” 改成 “event/*“,

這樣就能拜訪 event 下所有的子節點:

<xsl:for-each select="event/*">
    <xsl:variable name="keyword" select="text()" />
    <xsl:if test="local-name() = 'keyword' and starts-with($text, $keyword)">
        <xsl:value-of select="$keyword" />
    </xsl:if>
</xsl:for-each>

 

至於判斷的地方,可以用 local-name() 或 name() 來取得目前節點的名稱,

就能得知現在是 keyword 亦或是 except 了~

 

參考資料:

XSLT – Looping through all child nodes

Is there an XSLT name-of element?

(本頁面已被瀏覽過 313 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料