我正在尝试检查节点是否存在,然后它是否执行计算并存储值
因为我想列出营业时间
<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>
答案 0 :(得分:0)
<xsd:apply-template select='{the XPath}'
将仅选择那些符合当前上下文中select的相对XPath的元素。在内部构建此列表后,它将“apply-templates”。
在你的例子中
<xsl:variable name="Monday">
<xsl:apply-templates select="OpeningHours/Monday"/>
</xsl:variable>
将选择所有名为“Monday”且具有父“OpeningHours”的元素,然后再次应用规则。
,你的下一个“最具体的匹配”将是
<xsl:template match="OpeningHours/node()">
(尽管将其写为<xsl:template match="OpeningHours/*">
因此,对于每个选定的元素(来自apply-templates),将调用模板匹配。如果您有一个节点,则无需在那里进行测试。
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说;选择名为“Monday”的所有子元素,但前提是它们具有名为“OpeningHours”的父元素
希望这有帮助,