1

我在使用 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 "&#x00A0;"> ]>
<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">

上面的方法有效,但理想情况下我想要一些可以按类型选择的东西,所以不是硬编码的。

4

2 回答 2

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

于 2012-06-18T12:26:48.167 回答
0

您正在匹配文档的根(不是节点“根”),然后查找节点“EventData”。那在那个层次上是不存在的,唯一存在的就是<root>

如果要遍历 EventData,则需要

<xsl:for-each select="//EventData">
....

或者

<xsl:for-each select="root/HomeTemplate/ContentFolder/EventData">
...

因为 eventData 有很长的路要走

于 2012-06-18T09:54:44.997 回答