Форум программистов, компьютерный форум, киберфорум
XML/XSL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 27.07.2015
Сообщений: 27

Перевод XML файла в табличный вид HTML-е

11.08.2017, 07:16. Показов 1497. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Не как не могув XSLT нормализовать цикл в <th> и в <td> -шках проставить ячейки в пустых местах, ну чтобы выглядел
как на примере Книга1.xls
Если знаете в чем проблема, подскажите: help:
Вложения
Тип файла: zip general.zip (6.5 Кб, 21 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.08.2017, 07:16
Ответы с готовыми решениями:

Перевести в табличный вид
Всем привет, есть такая проблема, имеется перечень данных которые выводятся в всплывающем окне, их нужно привести в табличный вид(разбить...

перевод из xml в html
Всем привет, у меня возникла проблемма: есть файл xml вида &lt;students&gt; &lt;student id=&quot;1&quot; name=&quot;Иван&quot;...

Древовидная структура в Табличный вид
Ни как не могу решить следующую задачу. В базе имеется следующая таблица categories с полями id, name, level,...

12
203 / 184 / 42
Регистрация: 23.10.2015
Сообщений: 778
11.08.2017, 10:19
Tumatayev, проблема в том, что не можно через итерацию ожидать равное количество повторов....чтоб красиво было, делай без итераций....
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
11.08.2017, 11:40
Tumatayev, насколько я понял задачу, ты там в нескольких местах, ссылаясь на переменную, забыл поставить $ в начале имени
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?xml version="1.0"?>
 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
  <xsl:template match="model">
    <html>
      <body>
        <style>
          table{
          border:1px solid black;
          border-collapse:collapse
          }
          table th{
          border:1px solid black;
          }
          table tr{
          border:1px solid black;
          }
          table td{
          border:1px solid black;
          }
        </style>
        <!--xsl:for-each select="folder[name = 'Technology &amp; Physical']"-->
        <xsl:for-each select="folder">
          <h2>
            <xsl:value-of select="@name"/>
          </h2>
          <xsl:variable name="property" select="element/property[@key]"/>
          <table>
            <tr>
              <th>Наименование</th>
              <th>Тип</th>
              <th>Описание</th>
              <xsl:for-each select="$property">
                <th>
                  <xsl:value-of select="@key"/>
                </th>
              </xsl:for-each>
            </tr>
            <xsl:for-each select="element">
              <xsl:sort select="@*[name() = 'xsi:type'][1]"/>
              <xsl:sort select="@name"/>
              <tr>
                <td>
                  <xsl:value-of select="@name"/>
                </td>
                <td>
                  <xsl:value-of select="@*[name() = 'xsi:type'][1]"/>
                </td>
                <td>
                  <xsl:value-of select="documentation"/>
                </td>
                <xsl:variable name="propertyEl" select="$property"/>
                <xsl:for-each select="$propertyEl">
                  <td>
                    <xsl:value-of select="@value"/>
                  </td>
                </xsl:for-each>
              </tr>
            </xsl:for-each>
          </table>
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
 
</xsl:stylesheet>
1
203 / 184 / 42
Регистрация: 23.10.2015
Сообщений: 778
11.08.2017, 14:29
diadiavova, ты малость ошибся....там всего 8 колонок должно быть....проблема в том что итерацию надо делать 8 раз, чтоб таблица была нормальной и дописывлись пустые ячейки...а такое только 2 и 3 версии могут делать с отператором "1 to 8"....
1
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
11.08.2017, 14:45
ФридрихФ, да я ж запустил все и проверил. Создается нормальная таблица. Там нужные элементы сначала сохраняются в переменную, потом они обходятся дважды: для заголовков и для содержимого. Хотя в принципе, особо спорить не буду, поскольку ТС не стал заморачиваться на объяснениях ))
1
203 / 184 / 42
Регистрация: 23.10.2015
Сообщений: 778
11.08.2017, 14:57
diadiavova, ну он там приложил экселевский файл, для наглядности, поэтому я и думаю что должно быть 8 колонок...твое преобразование рабочее, процессор не падает, но....
1
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
11.08.2017, 15:01
ФридрихФ, я так понимаю, файл он для примера приложил, чтобы показать, как это должно выглядеть, а так все от данных зависит.
1
0 / 0 / 0
Регистрация: 27.07.2015
Сообщений: 27
14.08.2017, 09:28  [ТС]
diadiavova, да кстати забыл $
спасибо за отклик diadiavova, ФридрихФ!
но проблема не решена, так как цикл в <th> крутит по всем и выводит повторяющие ip и port, хотелсьбы столбцов было по минимуму как в примере) нуу... как объяснить по другому, не знаю даж(

С уважением!
0
203 / 184 / 42
Регистрация: 23.10.2015
Сообщений: 778
14.08.2017, 12:13
Tumatayev,
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:template match="/">
    <html>
      <body>
        <style>
          table{
          border:1px solid black;
          border-collapse:collapse
          }
          table th, table td{
          border:1px solid black;
          }
        </style>
          <h2>
            <xsl:value-of select="model/folder/@name"/>
          </h2>
          <table>
            <tr>
              <th>Наименование</th>
              <th>Тип</th>
              <th>Описание</th>
              <th>IP</th>
              <th>port</th>
              <th>port</th>
              <th>port</th>
              <th>port</th>
            </tr>
            <xsl:apply-templates select="model/folder/element">
              <xsl:sort select="@name"/>
            </xsl:apply-templates>
          </table>
      </body>
    </html>
</xsl:template>
<xsl:template match="element">
  <tr>
      <td>
        <xsl:value-of select="@name"/>
      </td>
      <td>
        <xsl:value-of select="@*[name() = 'xsi:type'][1]"/>
      </td>
      <td>
        <xsl:value-of select="documentation"/>
      </td>
      <td>
        <xsl:value-of select="property[1]/@value"/>
      </td>
      <td>
        <xsl:value-of select="property[2]/@value"/>
      </td>
      <td>
        <xsl:value-of select="property[3]/@value"/>
      </td>
      <td>
        <xsl:value-of select="property[4]/@value"/>
      </td>
      <td>
        <xsl:value-of select="property[5]/@value"/>
      </td>
  </tr>
</xsl:template>
</xsl:stylesheet>
2
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
14.08.2017, 14:20
Цитата Сообщение от Tumatayev Посмотреть сообщение
как объяснить по другому, не знаю даж(
Ну вообще, объяснять надо. Изначально неплохо было бы объяснить что тебе надо, тогда все было бы правильно, а так приходится догадываться, что ты хотел сделать.
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?xml version="1.0"?>
 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
  <xsl:template match="model">
    <html>
      <body>
        <style>
          table{
          border:1px solid black;
          border-collapse:collapse
          }
          table th{
          border:1px solid black;
          }
          table tr{
          border:1px solid black;
          }
          table td{
          border:1px solid black;
          }
        </style>
        <xsl:for-each select="folder">
          <h2>
            <xsl:value-of select="@name"/>
          </h2>
          <table>
            <tr>
              <th>Наименование</th>
              <th>Тип</th>
              <th>
                Описание
              </th>
              <xsl:call-template name="port-header"/>
            </tr>
            <xsl:for-each select="element">
              <xsl:sort select="@*[name() = 'xsi:type'][1]"/>
              <xsl:sort select="@name"/>
              <tr>
                <td>
                  <xsl:value-of select="@name"/>
                </td>
                <td>
                  <xsl:value-of select="@*[name() = 'xsi:type'][1]"/>
                </td>
                <td>
                  <xsl:value-of select="documentation"/>
                </td>
                <td>
                  <xsl:value-of select="property[@key='ip']/@value"/>
                </td>
                <xsl:for-each select="property[@key = 'port']">
                  <td>
                    <xsl:value-of select="@value"/>
                  </td>
                </xsl:for-each>
              </tr>
            </xsl:for-each>
          </table>
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
 
  <xsl:template name="port-header">
    <xsl:param name="count">
      <xsl:for-each select="element[property[@key='port']]">
        <xsl:sort data-type="number" order="descending" select="count(property[@key='port'])"/>
        <xsl:if test="position() = 1">
          <xsl:value-of select="count(property[@key='port'])"/>
        </xsl:if>
      </xsl:for-each>
    </xsl:param>
    <th>port</th>
    <xsl:if test="$count &gt; 0">
      <xsl:call-template name="port-header">
        <xsl:with-param name="count" select="$count - 1"/>
      </xsl:call-template>
    </xsl:if>
  </xsl:template>
 
</xsl:stylesheet>
Насколько я понимаю, пример, приведенный ФридрихФ, делает то же самое... почти. Я взял за основу твой пример, а вместо фиксированного набора заголовков нахожу элемент с наибольшим количеством портов и создаю заголовки port по нему. Если максимум во всех документах одинаков, то можешь воспользоваться любым примером.
2
0 / 0 / 0
Регистрация: 27.07.2015
Сообщений: 27
18.08.2017, 07:31  [ТС]
Сделали версию как нам хотелось, осталось пару моментов
1) сделать динамический этот код, думаю через цикл но у меня не получается и значение @key что бы тоже брал из гроупа, если канечно возможно
<td>
<xsl:value-of select="string-join(property[@key='ip']/@value, ', ' )"/>
</td>
<td>
<xsl:value-of select="string-join(property[@key='port']/@value, ', ' )"/>
</td>
<td>
<xsl:value-of select="string-join(property[@key='hw']/@value, ', ' )"/>
</td>

2) Folder-ов может быть много, нужно циклировать перечислять их и снизу каждого названия folder-а строить таблицу

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:template match="/">
    <html>
      <body>
        <style>
          table{
          border:1px solid black;
          border-collapse:collapse
          }
          table tr, table th, table td{
          border:1px solid black;
          }
        </style>
          <h2>
            <xsl:value-of select="@name"/>
          </h2>
          <table>
            <tr>
              <th>Наименование</th>
              <th>Тип</th>
              <th>Описание</th>
              <xsl:for-each-group select="//folder/element/property" group-by="@key">
                <th><xsl:value-of select="current-grouping-key()"/></th>
               </xsl:for-each-group>
            </tr>
            <xsl:apply-templates select="model/folder/element">
              <xsl:sort select="@name"/>
            </xsl:apply-templates>
          </table>
      </body>
    </html>
</xsl:template>
<xsl:template match="element">
  <tr>
      <td>
        <xsl:value-of select="@name"/>
      </td>
      <td>
        <xsl:value-of select="@*[name() = 'xsi:type'][1]"/>
      </td>
      <td>
        <xsl:value-of select="documentation"/>
      </td>
      <td>
        <xsl:value-of select="string-join(property[@key='ip']/@value, ', ' )"/>
      </td>
      <td>
        <xsl:value-of select="string-join(property[@key='port']/@value, ', ' )"/>
      </td>
      <td>
        <xsl:value-of select="string-join(property[@key='hw']/@value, ', ' )"/>
      </td>
  </tr>
</xsl:template>
</xsl:stylesheet>
0
0 / 0 / 0
Регистрация: 27.07.2015
Сообщений: 27
21.08.2017, 05:56  [ТС]
Никто не знает что ли
0
0 / 0 / 0
Регистрация: 27.07.2015
Сообщений: 27
22.08.2017, 12:44  [ТС]
вот и решение

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:template match="/">
    <xsl:variable name="properties" select="distinct-values(model/folder/element/property/@key)"/>
    <html>
      <body>
        <style>
          table{
          border:1px solid black;
          border-collapse:collapse
          }
          table tr, table th, table td{
          border:1px solid black;
          }
        </style>
          <h2>
            <xsl:value-of select="@name"/>
          </h2>
          <table>
            <tr>
              <th>Наименование</th>
              <th>Тип</th>
              <th>Описание</th>
              <xsl:for-each select="$properties">
                <th><xsl:value-of select="."/></th>
              </xsl:for-each>
            </tr>
            <xsl:for-each select="element">
            <tr>
              <td>
                <xsl:value-of select="@name"/>
              </td>
              <td>
                <xsl:value-of select="@*[name() = 'xsi:type'][1]"/>
              </td>
              <td>
                <xsl:value-of select="documentation"/>
              </td>
              <xsl:variable name="current" select="." />
              <xsl:for-each select="$properties">
                <td>
                  <xsl:value-of select="$current/property[@key=current()]/@value" separator=", " />
                </td>
              </xsl:for-each>
            </tr>
            </xsl:for-each>
          </table>
      </body>
    </html>
</xsl:template>
</xsl:stylesheet>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.08.2017, 12:44
Помогаю со студенческими работами здесь

Табличный вид и не заполненные свойства
в шаблоне табличная верстка &lt;table&gt; &lt;thead&gt; &lt;th&gt;Голы&lt;/th&gt; &lt;th&gt;Передачи&lt;/th&gt; ...

Табличный вид вывода данных из инфоблока
Доброго времени суток! Проблема заключается в следующем: в стандартном шаблоне компонента catalog.section элементы инфоблога выводятся...

Перевод файла формата txt в xml
Честно сразу скажу, что ни разу с xml до этого не сталкивалась. И во сейчас для загрузки в программу Документы ПУ 5 необходимо все...

Перевод текстового файла в XML формат
Здравствуйте, мне необходимо написать программу, которая получая на входе текстовый файл будет выдавать соответствующий ему файл xml. ...

Подскажите, как перевести XML в табличный формат
Здравтствуйте, пишу вам не от безделия, а по острой необходимости, купил я тут прогу, которая всю информацию (типа БД) переводит в XML...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru