Subject: RE: [xsl] Re: Converting specific child elements into attriutes o f parent From: "Sindigi, Ganesh K" <SindiGK@xxxxxxxxxxxxxxxxxxxxxx> Date: Thu, 30 Oct 2003 10:37:20 -0700 |
Thanks to all. One thing I noticed is the order of elements in the source.xml is also a reason for this error :-( For e.g., if the <id> is coming after <value>, then this error is still coming. As the source xml is coming from different interfaces, i do not have any control on the order of elements :-(. How do i resolve this? When i ran the command "java org.apache.xalan.xslt.Process -in source.xml -xsl ..\elmToAtt.xsl" Dimitre I used transformation provided by you and applied on this source.xml. (Notice that the order <id> and <value> elements in the first two <field>s has been interchanged) <customerList> <customer> <field> <value>cust1</value> <id>customerId</id> </field> <field> <value>Customer 1</value> <id>customerName</id> </field> <fieldGroup> <id>homeAddress</id> <fieldList> <field> <id>street</id> <value>98th Street </value> </field> <field> <id>city</id> <value>Chicago</value> </field> </fieldList> </fieldGroup> <fieldGroup> <id>companyAddress</id> <fieldList> <field> <id>street</id> <value>128th Street</value> </field> <field> <id>city</id> <value>Chicago</value> </field> </fieldList> </fieldGroup> </customer> </customerList> which produced the following result (With two errors) <customerList> <customer> file:/C:/working/XML/posting/../elmToAtt.xsl; Line 66; Column -1; id has an illegal attribute: {1} <field id="customerId">cust1</field> file:/C:/working/XML/posting/../elmToAtt.xsl; Line 66; Column -1; id has an illegal attribute: {1} <field id="customerName">Customer 1</field> <fieldGroup id="homeAddress"> <fieldList> <field id="street">98th Street </field> <field id="city">Chicago</field> </fieldList> </fieldGroup> <fieldGroup id="companyAddress"> <fieldList> <field id="street">128th Street</field> <field id="city">Chicago</field> </fieldList> </fieldGroup> </customer> </customerList> -----Original Message----- From: Dimitre Novatchev [mailto:dnovatchev@xxxxxxxxx] Sent: Thursday, October 30, 2003 2:01 AM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: [xsl] Re: Converting specific child elements into attriutes of parent > I have been trying to convert specific child elements into attributes of the > parent node. I looked through archive, there was a topic of converting all > children to attributes of the root. I followed the same thing and tried to > convert a specific child element, but i am getting following error. > elmToAtt.xsl; Line 18; Column -1; name() has an illegal attribute: {1} > I would like to copy the xml document and convert only specific elements > into attributes. > I am not able to make out why this error is, but to no avail. Hoping that > anybody in the list would help to resolve . The specific error can be corrected by using AVT like this: name="{name()}" Here's a transformation, which converts any element, whose name is in a list of names, to an identically named attribute of its parent: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="my:my" exclude-result-prefixes="my" > <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space elements="*"/> <my:elNames> <name>id</name> </my:elNames> <xsl:variable name="elNames" select="document('')/*/my:elNames/name"/> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <xsl:template match="*"> <xsl:choose> <xsl:when test="not(name() = $elNames)"> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:apply-templates select="*[name() = $elNames]"/> <xsl:apply-templates/> </xsl:copy> </xsl:when> <xsl:otherwise> <xsl:attribute name="{name()}"> <xsl:value-of select="."/> </xsl:attribute> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="value"> <xsl:value-of select="."/> </xsl:template> </xsl:stylesheet> When this transformation is applied on your original source.xml: <customerList> <customer> <field> <id>customerId</id> <value>cust1</value> </field> <field> <id>customerName</id> <value>Customer 1</value> </field> <fieldGroup> <id>homeAddress</id> <fieldList> <field> <id>street</id> <value>98th Street </value> </field> <field> <id>city</id> <value>Chicago</value> </field> </fieldList> </fieldGroup> <fieldGroup> <id>companyAddress</id> <fieldList> <field> <id>street</id> <value>128th Street</value> </field> <field> <id>city</id> <value>Chicago</value> </field> </fieldList> </fieldGroup> </customer> </customerList> the wanted result is produced: <customerList> <customer> <field id="customerId">cust1</field> <field id="customerName">Customer 1</field> <fieldGroup id="homeAddress"> <fieldList> <field id="street">98th Street </field> <field id="city">Chicago</field> </fieldList> </fieldGroup> <fieldGroup id="companyAddress"> <fieldList> <field id="street">128th Street</field> <field id="city">Chicago</field> </fieldList> </fieldGroup> </customer> </customerList> Hope this helped. ===== Cheers, Dimitre Novatchev. http://fxsl.sourceforge.net/ -- the home of FXSL XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Recall: Can't we use document, Narender S chauhan | Thread | RE: [xsl] Re: Converting specific c, Sindigi, Ganesh K |
Re: [xsl] XSL Grouping Trouble, karthikeyan.balasubr | Date | [xsl] performing calculations with , SANWAL, ABHISHEK (HP |
Month |