I have an XML structure like the following:
<Root>
<!-- ...other stuff -->
<Events>
<Event date="0000-00-00">Event Description etc...</Event>
<Event date="0000-00-00">Event Description etc...</Event>
<Event date="0000-00-00">Event Description etc...</Event>
</Events>
<!-- ...other stuff -->
</Root>
然后我在样式表中使用XSLT,如下所示:
<xsl:variable name="Events" select="/Root/Events/Event" />
<xsl:template match="/">
<!-- Stuff -->
<xsl:apply-templates select="$Events" />
<!-- Stuff -->
</xsl:template>
<xsl:template match="Event">
<!-- Regular Event Template Transformation here -->
</xsl:template>
<!-- ERROR HAPPENS HERE -->
<xsl:template match="not(node())">
<p class="message">There are currently no upcoming events</p>
</xsl:template>
我希望做的是有两个模板,一个仅在没有事件时显示。我知道可以使用XSLT和和测试来计算元素数量并调用正确的模板,就像在过程式语言中一样,但我正在尝试学习如何使用模板处理来完成此操作。 我得到的错误是: 预期表达式结束,找到'('. not -->(<-- node())
$Events
变量中的/Root/Events
而不是我的问题所述的/Root/Events/Event
时才有效。所以,我进行了更改。顺便说一下,在我的情况下,我的“Events”节点实际上是<in:result name="GetEvents">
,因此我需要将第一个模板更改为:<xsl:template match="in:result[@name='GetEvents' and not(Event)]">
使其正常工作。它有效了。^_^谢谢。 - Armstrongest