I have a non-hierarchical xml that has a pseudo structure. Each object declares a parent (except for the "root" object) and zero or more children, but does so using identifiers and reference attributes, rather than a nested structure. I would like to convert it to a nested structure.
<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>
For the record, the actual document also contains object definitions, which objects also refer to an attribute similar to the class, but I need to get the element name from the definition, again, the link identifier. At some point in the process, I convert the names of each “object” to a “template” or “subsection”. If this simplifies, I can perform this operation after applying the structure. I also have a tokenize function for the children attribute, since I am using XSLT 1.0, which does not have a built-in module.
So, for the example above, I would like to get this output:
<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>
Please keep in mind that these elements of the object contain other information, attributes, data, etc. They were removed to simplify the example, but may add a level of complexity to the problem.
If possible, I would like to do it in an elegant and extensible way. I am not forced, but would prefer to use XSL 1.0 (so that it can be integrated with existing server software).
Thank you for everyone who can help me or point me in the right direction!