Я пытаюсь преобразовать XML с древовидной структурой в плоский список. Это небольшая часть входного XML, что я пытаюсь преобразовать:Преобразование XML с древовидной структурой данных в плоскую структуру с использованием XSLT
<category_list>
<category>
<id>12</id>
<name>Forks</name>
<sub_categories>
<category>
<id>15</id>
<name>26"</name>
<sub_categories />
</category>
<category>
<id>16</id>
<name>27,5"</name>
<sub_categories />
</category>
<category>
<id>19</id>
<name>27,5+"</name>
<sub_categories />
</category>
<category>
<id>17</id>
<name>29"</name>
<sub_categories />
</category>
</sub_categories>
</category>
<category>
<id>13</id>
<name>Shocks</name>
<sub_categories />
</category>
<category>
<id>14</id>
<name>Springs</name>
<sub_categories />
</category>
</category_list>
мне нужен такой вывод:
<categories>
<category>
<id>12</id>
<name>Forks</name>
<parent_category>0</parent_category>
<order_by>1</order_by>
</category>
<category>
<id>15</id>
<name>26"</name>
<parent_category>12</parent_category>
<order_by>1</order_by>
</category>
<category>
<id>16</id>
<name>27,5"</name>
<parent_category>12</parent_category>
<order_by>2</order_by>
</category>
<category>
<id>19</id>
<name>27,5+"</name>
<parent_category>12</parent_category>
<order_by>3</order_by>
</category>
<category>
<id>17</id>
<name>29"</name>
<parent_category>12</parent_category>
<order_by>4</order_by>
</category>
<category>
<id>13</id>
<name>Shocks</name>
<parent_category>0</parent_category>
<order_by>2</order_by>
</category>
<category>
<id>14</id>
<name>Springs</name>
<parent_category>0</parent_category>
<order_by>3</order_by>
</category>
</categories>
Я понятия не имею, как это сделать. Первая проблема заключается в изменении древовидной структуры на плоский список, а вторая проблема - добавление тега order_by, который увеличивается с подсчетом категории.
Не могли бы вы посоветоваться?
Это работает, но есть одна проблема. Родительская категория всегда является идентификатором первой категории в списке. Если категория «Шоки» перед Форками, то все подкатегории «Форкс» имеют parent_category = 13 вместо 12. – sajushko
Так что, похоже, я это понял. Я использовал в категории ancestor :: category вместо ../../category и ancestor :: category/id в значении. Похоже, теперь он работает, как мне нужно. Thx много для помощи Мартин. – sajushko
@sajushko, извините за проблему, у меня был неправильный XPath там, теперь исправлен, хотя вы также нашли исправление самостоятельно. –