[英]XSLT use apply template to check if node exists
我正在嘗試檢查節點是否存在,然后是否執行計算並存儲值
因為我要列出營業時間
<xsl:variable name="Monday">
<xsl:apply-templates select="OpeningHours/Monday"/>
</xsl:variable>
<xsl:template match="OpeningHours/node()">
<xsl:if test="current()">
<xsl:value-of select="Open + Close"/>
</xsl:if>
</xsl:template>
雖然似乎我在某處做錯了
我的xml是
<OpeningHours>
<Monday>
<Open>8.5</Open>
<Close>20</Close>
</Monday>
<Tuesday>
<Open>8.5</Open>
<Close>20</Close>
</Tuesday>
<Wednesday>
<Open>8.5</Open>
<Close>20</Close>
</Wednesday>
<Friday>
<Open>8.5</Open>
<Close>22</Close>
</Friday>
<Saturday>
<Open>7</Open>
<Close>14</Close>
</Saturday>
</OpeningHours>
<xsd:apply-template select='{the XPath}'
將僅選擇在其當前上下文中符合select的相對XPath的那些元素。 在內部建立此列表后,它將“應用模板”。
在你的例子中
<xsl:variable name="Monday">
<xsl:apply-templates select="OpeningHours/Monday"/>
</xsl:variable>
將選擇所有父級為“ OpeningHours”的元素“ Monday”,然后再次應用規則。 您的下一個“最具體的匹配”是
<xsl:template match="OpeningHours/node()">
(盡管將其寫為<xsl:template match="OpeningHours/*">
因此,對於每個選定的元素(從apply-templates中),都會調用template-match。 如果您有節點,則無需在那里進行測試。
ps; 我會嘗試以下XSLT
<xsl:variable name="Monday">
<xsl:apply-templates select="OpeningHours/Monday"/>
</xsl:variable>
<xsl:template match="OpeningHours/*">
<xsl:value-of select="Open"/>
<xsl:text>-</xsl:text>
<xsl:value-of select="Close"/>
</xsl:template>
如果您確實想測試節點的存在,則通常使用XPath的“謂詞”軸。 例如;
<apply-templates select="Monday[parent::OpeningHours]" />
這個例子的XPath說: 選擇所有名為“星期一”的子元素,但前提是它們具有名為“ OpeningHours”的父元素
希望這可以幫助,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.