[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Grouping and converting by attribute by not using mode
Hi
I have a problem trying to isolate groups of information in some xml. I'm trying to convert from Spanish to English, i.e. renaming fields, and using the name attribute as the tag with its value as the value tag (see below). The field I want to convert is in the name attribute and the value of the field is in the value tag. My problem is that the only way I can isolate each group (by the start of each field) is to use the "mode" attribute in the apply-templates. Is there a more elegant solution to this problem, i.e. would it be easier to do it in two steps by converting the fields first? or is there a solution using keys? Thanks in advance, Ronan ==>Xml to convert <fields> <field name="PersonaUnaCalle"> <value>Sunny Street</value> </field> <field name="PersonaUnaCiudad"> <value>Dublin</value> </field> <field name="PersonaUnaDOB"> <value>19660301</value> </field> <field name="PersonaUnaTel"> <value>01035312174234</value> </field> <field name="PersonaDosCalle"> <value>Windy Street</value> </field> <field name="PersonaDosCiudad"> <value>Cork</value> </field> <field name="PersonaDosDOB"> <value>19800502</value> </field> <field name="PersonaDosTel"> <value>0103532287213</value> </field> </fields> ==>Xml converted <request> <PersonOne> <address> <street> Sunny Street </street> <city> Dublin </city> </address> <dob> 19660301 </dob> <telephone> 01035312174234 </telephone> </PersonOne> <PersonTwo> <address> <street> Windy Street </street> <city> Cork </city> </address> <dob> 19800502 </dob> <telephone> 0103532287213 </telephone> </PersonTwo> </request> ==>XSL using mode to isolate repeating groups <xsl:template match="fields"> <request> <PersonOne> <address> <xsl:apply-templates select="field[contains(@name, 'Ciudad') and starts-with( @name, 'PersonaUna')]"/> <xsl:apply-templates select="field[contains(@name, 'Calle') and starts-with( @name, 'PersonaUna')]" <!-- more lines in the address to match fields --> </address> <xsl:apply-templates mode="other" select="field[starts-with( @name, 'PersonaUna')]"/> </PersonOne> <PersonTwo> <address> <xsl:apply-templates select="field[contains(@name, 'Ciudad') and starts-with( @name, 'PersonaDos')]"/> <xsl:apply-templates select="field[contains(@name, 'Calle') and starts-with( @name, 'PersonaDos')]"/> <!-- more lines in the address --> </address> <xsl:apply-templates mode="other" select="field[starts-with( @name, 'PersonaDos')]"/> </PersonTwo> </request> </xsl:template>
<xsl:template match="field[contains( @name, 'Ciudad')]"> <city> <xsl:value-of select="."/> </city> </xsl:template> <!-- more template to match the lines in the address --> <!-- all other fields --> <xsl:template mode="other" match="field[starts-with( @name, 'PersonaUna')] | field[starts-with( @name, 'PersonaDos')]" > <xsl:if test="contains( @name, 'DOB')"> <dob> <xsl:value-of select="."/> </dob> </xsl:if> <xsl:if test="contains( @name,'Tel')"> <telephone> <xsl:value-of select="."/> </telephone> </xsl:if> <!-- more if's to match other fields to match the lines that aren't address types --> </xsl:template> _________________________________________________________________ Get faster connections?-- switch to?MSN Internet Access! http://resourcecenter.msn.com/access/plans/default.asp XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|