我无法使用我使用XSLT创建的宏来获取数据。我有几个EventData
个节点,我想从另一个Content文件夹中的页面访问。
我尝试了很多不同的查询(发布的内容太多),但我的最新查询在下面。当事件数据低于标准页面时,我有这个工作,但我已经将它们移动到自己的文件夹,并且无法成功更新XSLT。
XML:
<root id="-1">
<HomeTemplate id="1055" parentID="-1" level="1">
<ContentFolder id="1097" parentID="1055" level="2">
<EventData id="1095" parentID="1097" level="3">
<eventDate>2012-06-20T00:00:00</eventDate>
<eventName>Event Name Data</eventName>
<eventLocation>Event Location Data</eventLocation>
</EventData>
.......
</ContentFolder>
<ContentFolder id="1059" parentID="1055" level="2">
<StandardTemplate id="1061" parentID="1059" level="3">
<pageHeading>Results</pageHeading>
.......
</StandardTemplate>
</ContentFolder>
......
</HomeTemplate>
</root>
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes"/>
<xsl:param name="currentPage"/>
<xsl:template match="/">
<table>
<xsl:for-each select="EventData">
<tr>
<td>Event Date: <xsl:value-of select="umbraco.library:FormatDateTime(./eventDate, 'd')"/></td>
<td>Event Name: <xsl:value-of select="./eventName"/></td>
<td>Event Location: <xsl:value-of select="./eventLocation"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
编辑:
<xsl:for-each select="umbraco.library:GetXmlNodeById(1097)/EventData">
以上是有效的,但理想情况下我希望能按类型选择,因此不需要硬编码。
答案 0 :(得分:2)
旧架构
<xsl:for-each select="$currentPage/ancestor-or-self::node[@nodeTypeAlias='HomeTemplate']//node[@nodeTypeAlias='EventData']">
</xsl:for-each>
新架构
<xsl:for-each select="$currentPage/ancestor-or-self::HomeTemplate//EventData[@isDoc]">
</xsl:for-each>
请注意,此示例使用HomeTemplate的别名走到顶级节点/文档类型,因为我假设您使用的最顶级节点只有一个实例。
另请注意,这是一个相当昂贵的xPath调用,因为它走到树上以找到顶级节点,直到我们到达Home节点。然后,无论查找具有EventData别名的节点(文档类型)有多深,它都会查看所有子节点。
来源:http://our.umbraco.org/wiki/reference/xslt/45-xml-schema/xslt-examples-updated-to-new-schema
答案 1 :(得分:0)
您正在匹配文档的根(而不是节点“root”),然后查找节点“EventData”。在那个级别上不存在,唯一存在的是<root>
。
如果你想循环遍历EventData,你需要
<xsl:for-each select="//EventData">
....
或
<xsl:for-each select="root/HomeTemplate/ContentFolder/EventData">
...
因为eventData还有很长的路要走