У меня есть не-heirarchal xml, который имеет псевдоструктуру.Каждый объект объявляет родителя (кроме «корневого» объекта) и ноль или более потомков, но делает это, используя идентификаторы и ссылочные атрибуты, а не вложенную структуру.Я хотел бы преобразовать это во вложенную структуру.
<document>
<object id="6" children="12,15"/>
<object id="12" parent="6" children="13,18"/>
<object id="13" parent="12" children="14,16,17"/>
<object id="14" parent="13"/>
<object id="15" parent="6" children="21,22"/>
<object id="16" parent="13"/>
<object id="17" parent="13"/>
<object id="18" parent="12" children="23,25"/>
<object id="19" parent="23"/>
<object id="21" parent="15"/>
<object id="22" parent="15"/>
<object id="23" parent="18" children="19,24"/>
<object id="24" parent="23"/>
<object id="25" parent="18"/>
</document>
Для записи фактический документ также содержит определения объектов, на которые объекты также ссылаются в атрибуте, похожем на класс, но мне нужно получитьимя элемента из определения, опять же, по ссылочному идентификатору.В какой-то момент процесса я конвертирую имена каждого «объекта» в «шаблон» или «подраздел».Если это упрощает вещи, я могу выполнить эту операцию после применения структуры.У меня также есть токенизированная «функция» для атрибута children, так как я использую XSLT 1.0, который не имеет его встроенного.
Так что для примера выше я хотел бы получить такой вывод:
<document>
<object id="6">
<object id="12">
<object id="13">
<object id="14"/>
<object id="16"/>
<object id="17"/>
</object>
<object id="18">
<object id="23">
<object id="19"/>
<object id="24"/>
</object>
<object id="25"/>
</object>
</object>
<object id="15">
<object id="21"/>
<object id="22"/>
</object>
</object>
</document>
Имейте в виду, что эти элементы объекта содержат другую информацию, атрибуты, данные и т. Д. Они были удалены, чтобы упростить пример, но могут добавить сложность к проблеме.
Если возможно, я хотел бы сделать это элегантным и расширяемым способом.Я не обязан, но предпочел бы использовать XSL 1.0 (чтобы его можно было интегрировать с существующим серверным программным обеспечением).
Спасибо всем, кто может мне помочь или указать мне правильное направление!