Subject: Re: [xsl] building a hierarchical classification out of flat and redundant data From: "Mukul Gandhi" <gandhi.mukul@xxxxxxxxx> Date: Mon, 24 Jul 2006 22:44:17 +0530 |
I seem to be able to find all information that needs to be generated in output XML, in the *last document element*.
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/> <xsl:template match="/documents"> <!-- processing the last document element --> <xsl:apply-templates select="document[not(following-sibling::document)]" /> </xsl:template>
<xsl:template match="document"> <xsl:call-template name="PrintNodes"> <xsl:with-param name="nodeset" select="*" /> </xsl:call-template> </xsl:template>
<xsl:template name="PrintNodes"> <xsl:param name="nodeset" />
<xsl:if test="$nodeset[1]"> <node id="{$nodeset[1]}" name="{$nodeset[2]}"> <xsl:call-template name="PrintNodes"> <xsl:with-param name="nodeset" select="$nodeset[position() > 2]" /> </xsl:call-template> </node> </xsl:if>
<?xml version="1.0" ?> <documents> <document> <tag1>3</tag1> <tag1a>Social Sciences</tag1a> </document> <document> <tag1>3</tag1> <tag1a>Social Sciences</tag1a> <tag2>32</tag2> <tag2a>Politics</tag2a> </document> <document> <tag1>3</tag1> <tag1a>Social Sciences</tag1a> <tag2>32</tag2> <tag2a>Politics</tag2a> <tag3>326</tag3> <tag3a>Slavery</tag3a> </document> </documents>
<?xml version="1.0" encoding="UTF-8"?> <node id="3" name="Social Sciences"> <node id="32" name="Politics"> <node id="326" name="Slavery"/> </node> </node>
Can you please confirm whether you need this kind of solution, or need what David and Mike have suggested?
Regards, Mukul
Dear XSLT-Community,
i have problem with some "strange" type of data which i have to convert to a hierarchical xml structure.
My source is a huge xml file which represents a decimal classifikation. It contains so called documents, where each document represents one node of the classification. Furthermore each documents shows the direct parents of a node. It's a structure like this (example taken from http://www.udcc.org): ... <document> <tag1>3</tag1> <tag1a>Social Sciences</tag1a> </document> <document> <tag1>3</tag1> <tag1a>Social Sciences</tag1a> <tag2>32</tag2> <tag2a>Politics</tag2a> </document> <document> <tag1>3</tag1> <tag1a>Social Sciences</tag1a> <tag2>32</tag2> <tag2a>Politics</tag2a> <tag3>326</tag3> <tag3a>Slavery</tag3a> </document> ... As you can see there is no hierarchical information in it instead of the names and the sequence of the tags. In my real data i have up to 9 levels, but not every time. My result should look like this (or something similar): ... <node id="3" name="Social Science"> <node id="32" name="Politics"> <node id="326" name="Slavery"/> </node> </node> ... I have simply no idea what to start with to archive this result. I guess the first step would be to get rid of all those redundant content, but i don't know how. And i even can't figure out how to build the hierachichal structure the same time.
Has anyone a good starting point for this?
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] building a hierarchical c, Michael Kay | Thread | Re: [xsl] building a hierarchical c, Albert Juhé |
Re: [xsl] Fwd: xsl:key() and $varia, Wendell Piez | Date | [xsl] $variables with xsl:key(), Steve |
Month |