New XML-schema from version 4.5
Follows an example of the XML based on the new schema. Note that each node has been replaced with the Alias name of the node. This has ramifications on how XSLT-code has to be written.
<root id="-1">
<Home id="1080"
parentID="-1"
level="1"
writerID="0"
creatorID="0"
nodeType="1066"
template="1051"
sortOrder="2"
createDate="2010-05-30T16:17:58"
updateDate="2010-05-30T16:22:54"
nodeName="Home"
urlName="home"
writerName="Administrator"
creatorName="Administrator"
path="-1,1080"
isDoc="">
<umbracoNaviHide>0</umbracoNaviHide>
<siteName>My Site</siteName>
<headerText>
<![CDATA[<p><strong>Sam Grady designed this for Warren Buckley.</strong>
"This" idea was first created by the incredible Robert Brownjohn
and has been copied many times since.</p>
]]>
</headerText>
<Textpage id="1081"
parentID="1080"
level="2"
writerID="0"
creatorID="0"
nodeType="1070"
template="1058"
sortOrder="1"
createDate="2010-05-30T16:23:31"
updateDate="2010-05-30T16:24:03"
nodeName="About"
urlName="about"
writerName="Administrator"
creatorName="Administrator"
path="-1,1080,1081"
isDoc="">
<umbracoNaviHide>0</umbracoNaviHide>
<headerText>
<![CDATA[<p>This is a good place to put a service message or
something to<br />help define your site or company.</p>
]]>
</headerText>
<bodyText>
<![CDATA[<p><strong>Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Aliquam ullamcorper condimentum lorem.
Curabitur placerat nunc ut leo. Integer eros ligula,
vestibulum at, eleifend id, dignissim vel, est.</strong></p>
]]>
</bodyText>
</Textpage>
</Home>
</root>
The old XML-schema (prior to version 4.5)
Follows an example of the XML based on the new schema. Here each document is referred to using node elements.
<root id="-1">
<node id="1080"
version="e9716f36-2014-4154-b030-c9855c1a3f31"
parentID="-1"
level="1"
writerID="0"
creatorID="0"
nodeType="1066"
template="1051"
sortOrder="2"
createDate="2009-02-26T18:39:39"
updateDate="2009-04-27T16:43:41"
nodeName="Home"
urlName="home"
writerName="Administrator"
creatorName="Administrator"
nodeTypeAlias="CWS_Home"
path="-1,1080">
<data alias="umbracoNaviHide">0</data>
<data alias="siteName">My Site</data>
<data alias="headerText">
<![CDATA[<p><strong>Sam Grady designed this for Warren Buckley.</strong>
"This" idea was first created by the incredible Robert Brownjohn
and has been copied many times since.</p>
]]>
</data>
<node id="1081"
version="67a016f9-3eda-4c59-afc7-e5cab7fbfc35"
parentID="1080"
level="2"
writerID="0"
creatorID="0"
nodeType="1070"
template="1058"
sortOrder="1"
createDate="2009-02-26T18:47:46"
updateDate="2009-04-27T16:43:41"
nodeName="About"
urlName="about"
writerName="Administrator"
creatorName="Administrator"
nodeTypeAlias="CWS_Textpage"
path="-1,1080,1081">
<data alias="umbracoNaviHide">0</data>
<data alias="headerText">
<![CDATA[<p>This is a good place to put a service message or something to
help define your site or company.</p>
]]>
</data>
<data alias="bodyText">
<![CDATA[<p><strong>Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Aliquam ullamcorper condimentum lorem. Curabitur placerat nunc ut leo.
Integer eros ligula, vestibulum at, eleifend id, dignissim vel,
est.</strong></p>
]]>
</data>
</node>
</node>
</root>
Examples showing changes in XSLT
Getting the Document Type for $currentPage
New version:
<xsl:value-of select="local-name($currentPage)" />
Replaces old version:
<xsl:value-of select="$currentPage/@nodeTypeAlias" />
Selecting a certain document type
New version, simple form:
<xsl:for-each select="$currentPage/subPage">
or using an if-test:
<xsl:for-each select="$currentPage/*">
<xsl:if test="self::subPage">.......</xsl:if>
</xsl:for-each>
or testing against a variable:
<xsl:for-each select="$currentPage/*">
<xsl:if test="local-name() = $subPageName">.......</xsl:if>
</xsl:for-each>
Replaces old version:
<xsl:for-each select="$currentPage/node [@nodeTypeAlias = 'subPage']">
For Each child node
New version using
/*
to select all nodes below this and
@isDoc
to select documents only:
<xsl:for-each select="$currentPage/* [@isDoc]">
</xsl:for-each>
Replaces old version:
<xsl:for-each select="$currentPage/node">
</xsl:for-each>
For Each child node of a specfic Document Type Alias
New version:
<xsl:for-each select="$currentPage/NewsItem">
</xsl:for-each>
Or if you have a property with the same name, use
@isDoc
to get document:
<xsl:for-each select="$currentPage/NewsItem [@isDoc]">
</xsl:for-each>
Replaces old version:
<xsl:for-each select="$currentPage/node [@nodeTypeAlias='NewsItem']">
</xsl:for-each>
For Each child node excluding a specfic Document Type Alias
New version:
<xsl:for-each select="$currentPage/*[not(self::NewsItem)]">
</xsl:for-each>
Replaces old version:
<xsl:for-each select="$currentPage/node [@nodeTypeAlias!='NewsItem']">
</xsl:for-each>
For Each child node via a selectable source
This example shows you how to list childnodes from the nodeID of the contentpicker.
New version:
<xsl:param name="Source" select="$currentPage/mySource" />
<xsl:for-each select="umbraco.library:GetXmlNodeById($Source)/DocType">
</xsl:for-each>
Replaces old version:
<xsl:param name="Source"
select="umbraco.library:GetXmlNodeById($currentPage/data
[@alias='mySource'])" />
<xsl:for-each select="$Source/node"></xsl:for-each>
For Each node of a specfic Document Type Alias
This example walks upto the top level node and then looks through all child nodes. Expensive!
New version:
<xsl:for-each select="$currentPage/ancestor-or-self::Home//MyDocumentType [@isDoc]">
</xsl:for-each>
Replaces old version:
<xsl:for-each select="$currentPage/ancestor-or-self::node
[@nodeTypeAlias='Home']//node [@nodeTypeAlias='MyDocumentType']">
</xsl:for-each>
Using a macro parameter to get a document type property
New version:
<xsl:value-of select="$currentPage/* [name() = $myMacroParameter and not(@isDoc)]" />
Replaces old version:
<xsl:value-of select="$currentPage/data [@alias=$myMacroParameter]" />