1

XSLTを使用して作成したマクロでデータを取得できません。EventData別のコンテンツフォルダのページからアクセスしたいノードがいくつかあります。

私は多くの異なるクエリを試しましたが(投稿するには多すぎます)、最新のクエリは以下のとおりです。イベントデータが標準ページを下回っているときにこれを機能させましたが、その後、それらを独自のフォルダーに移動し、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>

使用している最上位レベルのノードにはインスタンスが 1 つしかないと想定しているため、この例では HomeTemplate のエイリアスを使用して最上位のノード/ドキュメント タイプに到達することに注意してください。

また、ホーム ノードに到達するまでツリーを上って最上位ノードを見つけるため、これはかなりコストのかかる xPath 呼び出しであることに注意してください。次に、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 に答える