1. Перейдите к файлу hbemployees.xsl в вашем редакторе.Непосредственно после открытия элемента таблицы стилей создайте ключ отделов, сопоставив элемент сотрудника и используя элемент отдела для индекса ключа.Цель этого ключа - сгруппировать сотрудников по отделам.
Непосредственно после заголовка «Отчет сотрудника h1» вставьте элемент «для каждого», который использует мюнхенскую группировку, чтобы выбрать каждый уникальный отдел с помощью пути расположения: «// employee [generate-id () = generate-id(ключ («отделы», «отдел») [1])] », затем сортируйте результаты по отделам.
Каждый раз в цикле for-each пишите следующий HTML-код витоговый документ:
<table class="employeeList"> <caption>department</caption> <thead>
<tr>
<th>Name</th>
<th>Position</th>
<th>Salary</th>
<th>Phone</th>
<th>Gender</th>
<th>Marital Status</th>
<th>Work Status</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
где отдел - значение элемента отдела.
В элементе tbody HTML-кода, который вы только что написали, примените шаблон, используя ключ отделов с текущим значением элемента отдела, чтобы отобразить информацию о каждом сотруднике в текущем отображаемом отделе.Сортируйте примененный шаблон по убыванию элемента зарплаты.
Сразу после корневого шаблона вставьте новый шаблон, соответствующий элементу employee.Цель этого шаблона - написать строку таблицы, содержащую информацию о выбранном сотруднике.Пусть шаблон напишет следующий HTML-код в итоговый документ:
<tr>
<td>name</td>
<td>position</td>
<td>salary</td>
<td>phone</td>
<td>gender</td>
<td>marital status</td>
<td>working status</td>
</tr>
, где имя, должность, зарплата, телефон, пол, семейное положение и рабочий статус являются значениями имени, должности, зарплаты,элементы phone, пол, martialStatus и workingStatus.Отформатируйте зарплату так, чтобы она отображалась в валюте.
Я не уверен, почему мои файлы не работают.
<?xml version="1.0" encoding="UTF-8" ?>
<!--
New Perspectives on XML, 3rd Edition
Tutorial 7
Case Problem 1
Harris and Barnes Style Sheet
Filename: hbemployees.xsl
Supporting Files: hbemployees.xml
-->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="departments" match="employee" use="department" />
<xsl:variable name="hbemployessDoc" select="document('hbemployess.xml')" />
<xsl:output method="html"
doctype-system="about:legacy-compat"
encoding="UTF-8"
indent="yes" />
<xsl:template match="/">
<html>
<head>
<title>Employee Report</title>
<link href="hbstyles.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="wrap">
<header>
<img src="hblogo.png" alt="Harris and Barnes" />
</header>
<h1>Employee Report</h1>
<xsl:for-each
select="//employee[generate-id()=generate-id(key('departments', department)[1])]">
<xsl:sort select="department" />
<table class="employeeList">
<caption><xsl:value-of select="department"/></caption>
<thead>
<tr>
<th>Name</th>
<th>Position</th>
<th>Salary</th>
<th>Phone</th>
<th>Gender</th>
<th>Marital Status</th>
<th>Work Status</th>
</tr>
</thead>
<tbody>
<xsl:apply-templates select="key('departments', department)">
<xsl:sort select="salary" order="descending" />
</xsl:apply-templates>
</tbody>
</table>
</xsl:for-each>
</div>
</body>
</html>
</xsl:template>
<xsl:template match="employee">
<tr>
<td> <xsl:value-of select="name" /> </td>
<td> <xsl:value-of select="position" /> </td>
<td><xsl:value-of select="format-number(salary,'$#,##0')"/></td>
<td> <xsl:value-of select="phone" /> </td>
<td> <xsl:value-of select="gender" /></td>
<td> <xsl:value-of select="maritalStatus" /></td>
<td> <xsl:value-of select="workingStatus" /></td>
</tr>
</xsl:template>
</xsl:stylesheet>
РЕДАКТИРОВАТЬ: Ниже приведен примерXML, относящийся к этому уроку
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="hbemployees.xsl" ?>
<employees xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<employee empID="4">
<name>Heffner, Marian</name>
<position>Chief Operating Officer</position>
<phone>x10962</phone>
<email>mheffner50@example.com/harrisbarnes</email>
<department>Management</department>
<salary>262000</salary>
<gender>female</gender>
<maritalStatus>married</maritalStatus>
<workStatus>Full Time</workStatus>
</employee>
<employee empID="192">
<name>Murff, Nicolle</name>
<position>Mgr Software Client Supp</position>
<phone>x32524</phone>
<email>nmurff63@example.com/harrisbarnes</email>
<department>Sales</department>
<salary>137000</salary>
<gender>female</gender>
<maritalStatus>married</maritalStatus>
<workStatus>Full Time</workStatus>
</employee>
<employee empID="295">
<name>Vecchio, Art</name>
<position>Line Worker</position>
<phone>x12125</phone>
<email>avecchio55@example.com/harrisbarnes</email>
<department>Management</department>
<salary>83000</salary>
<gender>male</gender>
<maritalStatus>married</maritalStatus>
<workStatus>Part Time</workStatus>
</employee>
<employee empID="294">
<name>Lewis, Richard</name>
<position>Met Read/Coll</position>
<phone>x22131</phone>
<email>rlewis19@example.com/harrisbarnes</email>
<department>Production</department>
<salary>74500</salary>
<gender>male</gender>
<maritalStatus>married</maritalStatus>
<workStatus>Full Time</workStatus>
</employee>
<employee empID="193">
<name>Fleming, Angela</name>
<position>Inventory Ck</position>
<phone>x31751</phone>
<email>afleming30@example.com/harrisbarnes</email>
<department>Sales</department>
<salary>99000</salary>
<gender>female</gender>
<maritalStatus>married</maritalStatus>
<workStatus>Full Time</workStatus>
</employee>
</employees>