@krasnovro

Чтение многоуровневого xml файла, как прочесть правильно (XSLT)?

Есть такой xml файл:
<?xml version="1.0" encoding="utf-8" ?>
<EmployeeData>  
    <Department id = "1">
		<Name>WEB</Name>
		<Employee id = "1">
			<FirstName>Константин</FirstName>
			<LastName>Васильев</LastName>
			<MiddleName>Иванович</MiddleName>
			<Gender>М</Gender>
			<BirthDate>27.09.2000</BirthDate>
			<DateOfEmployeement>22.07.2019</DateOfEmployeement>
			<Post>Джуниор</Post>
			
			<Project id = "1">
				<Name>Соц портал</Name>
				<Time>300</Time>
				<Price>7000$</Price>
			</Project>
			
		</Employee>
		<Employee id = "3">
			<FirstName>Василий</FirstName>
			<LastName>Михайлов</LastName>
			<MiddleName>Юрьевич</MiddleName>
			<Gender>М</Gender>
			<BirthDate>01.09.1990</BirthDate>
			<DateOfEmployeement>21.02.2005</DateOfEmployeement>
			<Post>Синъер</Post>
			
			<Project id = "1">
				<Name>Соц портал</Name>
				<Time>300</Time>
				<Price>7000$</Price>
			</Project>
			
		</Employee>
    </Department>

    <Department id = "2">
		<Name>Тех поддержка</Name>
		<Employee id = "2">
			<FirstName>Ирина</FirstName>
			<LastName>Петрова</LastName>
			<MiddleName>Петровна</MiddleName>
			<Gender>Ж</Gender>
			<BirthDate>03.08.1998</BirthDate>
			<DateOfEmployeement>04.05.2017</DateOfEmployeement>
			<Post>Оператор</Post>
			
			<Project id = "2">
				<Name>WEB</Name>
				<Time>300</Time>
				<Price>7000$</Price>
			</Project>
			
		</Employee>
	</Department>
</EmployeeData>


Мне его нужно прочесть правильно и вывести в html
Вот xslt код который я написал:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="EmployeeData">
    <html>
      <head>
        <style type="text/css">
              body {
              background-color: rgb(255, 248, 220);
              }
              h1, h2 {
              text-align: center;
              }
              table {
              border:thin solid rgh(128, 0, 0);
              }
              thead {
              font-weight: bold;
              text-align: center;
              }
              td {
              padding: 5 px;
              border: thin solid black;
              }
              ul {
              font-weight: bold;
              }
              ol {
              font-style: italic;
              forecolor;
              }
            </style>
        <title>Список отделов</title>
      </head>
      <body>
        <h1>Данные о проектах</h1>
        <ul>
        <xsl:for-each select="//Department">
          <li>
           Отдел: Код:
          <xsl:value-of select="@id"/>
            Название:
          <xsl:value-of select="Name"/>>
          
          <ol>
            Сотрудники: ФИО:
            <xsl:value-of select="Employee/FirstName"/>
            <xsl:value-of select="Employee/LastName"/>
            <xsl:value-of select="Employee/MiddleName"/>
            Пол:
            <xsl:value-of select="Employee/Gender"/>
            Дата рождения:
            <xsl:value-of select="Employee/BirthDate"/>
          </ol>
            
          </li>
      </xsl:for-each>
        
        </ul>
        <h2>Данные о сотрудниках</h2>
        <table>
          <thead>
            <tr bgcolor="#9acd32">
              <td style="text-align:left">Имя</td>
              <td style="text-align:left">Фамилия</td>
              <td style="text-align:left">Отчество</td>
              <td style="text-align:left">Должность</td>
              <td style="text-align:left">КодПроекта</td>
              <td style="text-align:left">Проект</td>
              <td style="text-align:left">ВремяПроекта</td>
            </tr>
          </thead>
          <tbody>
            <xsl:for-each select="//Department">
            <tr>
              <td>
                <xsl:value-of select="Employee/FirstName"/>
              </td>
              <td>
                <xsl:value-of select="Employee/LastName"/>
              </td>
              <td>
                <xsl:value-of select="Employee/MiddleName"/>
              </td>
              <td>
                <xsl:value-of select="Employee/Post"/>
              </td>
              <td>
                <xsl:value-of select="Employee/Project/@id"/>
              </td>
              <td>
                <xsl:value-of select="Employee/Project/Name"/>
              </td>
              <td>
                <xsl:value-of select="Employee/Project/Time"/>
              </td>
            </tr>
          </xsl:for-each>
          </tbody>
        </table>
      </body>
    </html>
  
   </xsl:template>        
</xsl:stylesheet>


В результате выполнения я получаю не совсем правильный вывод:
5e068869968ed980110050.png
то есть, он выводит по одному сотруднику из каждого отдела, а не перебирает всех сотрудников данного отдела
Что я не так делаю
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
zabudkin
@zabudkin
Инженер-системотехник, программист, админ, ТПУ!!!!
Ох тыж блин
А это https://www.php.net/manual/ru/book.xsl.php
не помогает?

ps: поставьте мне плюс или где тут, чтобы я мог не один раз отвечать.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы