devxlogo

Using XSLT to Transform Flat Data Into a Hierarchy

Using XSLT to Transform Flat Data Into a Hierarchy

Question:

I have a limited understanding of XSL (Extensible Stylesheet Language) and have been trying to figure out how to write an XSL document that will transform a highly de-normalized set of data into a hierarchical XML document. It looks to me like it would be easier to transform the data with a traditional programming language. This data serves as an example of this issue:

Initial Data:
Parent 1 Key, Attribute1, Attribute2, Attribute3, Child 1 Key, Child Attribute1, Child Attribute2

Parent 1 Key, Attribute1, Attribute2, Attribute3, Child 2 Key, Child Attribute1, Child Attribute2

Parent 1 Key, Attribute1, Attribute2, Attribute3, Child 3 Key, Child Attribute1, Child Attribute2

Parent 2 Key, Attribute1, Attribute2, Attribute3, Child 1 Key, Child Attribute1, Child Attribute2

Parent 2 Key, Attribute1, Attribute2, Attribute3, Child 2 Key, Child Attribute1, Child Attribute2

Desired Transformation:
Parent 1
   Child 1
   Child 2
   Child 3
Parent 2
   Child 1
   Child 2

Answer:

If the initial data is represented in a flat structure as:

Then you actually need to do two things: attach the adult attributes uniquely to the first node, and attach the child attributes uniquely in the same fashion. Your comment about highly de-normalized data is a telling clue to solving this problem. The trick is to normalize it?create a unique array of parent elements, then iterate through each parent to retrieve the children belonging to that parent.

This is something that could be done with XSL and a lot of work, but it’s probably easier to solve it using script:

Load the XML document, then pass to the function the name of the parent’s primary key (here “pk”) the properties that belong the parent (array(“pa1″,”pa2″,”pa3”) and the same for the child’s primary key name and properties. You should rely on position alone, since not all parsers store attributes in the same order as they’re declared.

The function returns an XML document with this format (give or take some white-space):

                                                        

devxblackblue

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist