[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?
(本頁面已被瀏覽過 349 次)