Поскольку ваш вопрос относится только к Umbraco, и я недавно работал с ним, я добавлю более конкретный ответ для Umbraco на тот случай, если другие ищут полное решение.
Обратите вниманиечто XSLT является языком типа «Шаблон», он находит самое сильное соответствие для каждого узла и применяет этот шаблон.Это допускает некоторую забавную настройку (например, один шаблон для обычных сотрудников, но специальный шаблон для CIO / CEO / Managers и т. Д.).Пожалуйста, посмотрите на w3schools для получения дополнительной информации.
Учитывая вашу структуру выше, я могу сказать, что Департаменты и Сотрудники являются узлами в вашем Umbracoдерево содержимого, расположенное под узлом EmployeeArea .Предполагая, что это XSLT для применения к EmployeeArea в качестве переменной $ currentPage , хорошо подойдет следующее:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxml="urn:schemas-microsoft-com:xslt"
xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets"
xmlns:MyEmployeeLibrary="urn:MyEmployeeLibrary"
exclude-result-prefixes="MyEmployeeLibrary msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets ">
<xsl:output method="html" omit-xml-declaration="yes"/>
<xsl:param name="currentPage"/>
<xsl:template match="/">
<h1>Employees page:</h1>
<ul>
<xsl:apply-templates select="$currentPage/EmployeeDepartment" />
</ul>
</xsl:template>
<xsl:template match="EmployeeDepartment">
<li>
<a href="{umbraco.library:NiceUrl(@id)}">
<xsl:value-of select="@nodeName" />
</a>
<ul>
<xsl:apply-templates select="Employee" />
</ul>
</li>
</xsl:template>
<xsl:template match="Employee">
<li>
<a href="{umbraco.library:NiceUrl(@id)}">
<xsl:value-of select="@nodeName" />
<!--
Your sample XML didn't include phone/email, but your output requests it.
Let's assume you've created your own XSLT Extension to get this information.
-->
<xsl:value-of select="MyEmployeeLibrary:GetDetailsForList(@id)"/>
</a>
</li>
</xsl:template>
</xsl:stylesheet>
Для получения дополнительной информации о создании пользовательского XSLTРасширение для Umbraco, посмотрите обучающие видео для разработчиков в разделе UmbracoTV (это действительно просто, и если вы работаете с 4.6.1, просто перетащите свою DLL в папку \ bin \, и она работает).
ПРИМЕЧАНИЕ: я использовал здесь вложенные теги UL, вы можете изменить его на любой HTML, который вам нравится, теги DIV с назначенным классом CSS - мой предпочтительный метод.