Hello, I have xml file where in at various levels, I get following data structures, these can appear multiple times, and at multiple levels and locations: <UserValue value="PropertyValue" title="Property" /> I want to conver this element as follows: <UserValue> <Property>PropertyValue</Property> How do I do this using xslt? Thanks Yogi Watcher
Yogi Watcher wrote: > I have xml file where in at various levels, I get following data structures, > these can appear multiple times, and at multiple levels and locations: > > <UserValue value="PropertyValue" title="Property" /> > > I want to conver this element as follows: > > <UserValue> > <Property>PropertyValue</Property> > > How do I do this using xslt? <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <xsl:template match="UserValue"> <xsl:copy> <xsl:element name="{@title}"> <xsl:value-of select="@value"/> </xsl:element> </xsl:copy> </xsl:template> -- Martin Honnen --- MVP XML http://JavaScript.FAQTs.com/
Hello Martin, I used this same xslt, but I don't get the desired result. All I get is exact copy of the my original xml file. In my original file inside my root element there is is an attribute "xmlns=http://www.plmxml.org/Schemas/PLMXMLSchema" defined. I noticed that if I keep this attribute in my original xml file, all I get back after transformation is exact copy of the source. However, if I remove this attribute then transform works exactly as I needed. Is this normal, how do I workaround this issue? Thanks. "Martin Honnen" wrote: > Yogi Watcher wrote: > > > I have xml file where in at various levels, I get following data structures, > > these can appear multiple times, and at multiple levels and locations: > > > > <UserValue value="PropertyValue" title="Property" /> > > > > I want to conver this element as follows: > > > > <UserValue> > > <Property>PropertyValue</Property> > > > > How do I do this using xslt? > > > <xsl:template match="@* | node()"> > <xsl:copy> > <xsl:apply-templates select="@* | node()"/> > </xsl:copy> > </xsl:template> > > <xsl:template match="UserValue"> > <xsl:copy> > <xsl:element name="{@title}"> > <xsl:value-of select="@value"/> > </xsl:element> > </xsl:copy> > </xsl:template> > > > > -- > > Martin Honnen --- MVP XML > http://JavaScript.FAQTs.com/ >
Yogi Watcher wrote: > I used this same xslt, but I don't get the desired result. All I get is > exact copy of the my original xml file. In my original file inside my root > element there is is an attribute > "xmlns=http://www.plmxml.org/Schemas/PLMXMLSchema" defined. > > I noticed that if I keep this attribute in my original xml file, all I get > back after transformation is exact copy of the source. However, if I remove > this attribute then transform works exactly as I needed. > > Is this normal, how do I workaround this issue? Change this template >> <xsl:template match="UserValue"> >> <xsl:copy> >> <xsl:element name="{@title}"> >> <xsl:value-of select="@value"/> >> </xsl:element> >> </xsl:copy> >> </xsl:template> to <xsl:template match="pl:UserValue" xmlns:pl="http://www.plmxml.org/Schemas/PLMXMLSchema"> <xsl:copy> <xsl:element name="{@title}"> <xsl:value-of select="@value"/> </xsl:element> </xsl:copy> </xsl:template> -- Martin Honnen --- MVP XML http://JavaScript.FAQTs.com/
Hello Martin, Thanks. It worked. Just to see what happens, I changed "pl:UserValue" to "junk:UserValue" and "xmlns:pl" to "xmlns:junk" and it still works!!! Now I am curious as why it works with "pl" or with some random text as "junk". But thank you for helping me. "Martin Honnen" wrote: > Yogi Watcher wrote: > > > I used this same xslt, but I don't get the desired result. All I get is > > exact copy of the my original xml file. In my original file inside my root > > element there is is an attribute > > "xmlns=http://www.plmxml.org/Schemas/PLMXMLSchema" defined. > > > > I noticed that if I keep this attribute in my original xml file, all I get > > back after transformation is exact copy of the source. However, if I remove > > this attribute then transform works exactly as I needed. > > > > Is this normal, how do I workaround this issue? > > Change this template > > >> <xsl:template match="UserValue"> > >> <xsl:copy> > >> <xsl:element name="{@title}"> > >> <xsl:value-of select="@value"/> > >> </xsl:element> > >> </xsl:copy> > >> </xsl:template> > > to > <xsl:template match="pl:UserValue" > xmlns:pl="http://www.plmxml.org/Schemas/PLMXMLSchema"> > <xsl:copy> > <xsl:element name="{@title}"> > <xsl:value-of select="@value"/> > </xsl:element> > </xsl:copy> > </xsl:template> > > -- > > Martin Honnen --- MVP XML > http://JavaScript.FAQTs.com/ >
Yogi Watcher wrote: > Just to see what happens, I changed "pl:UserValue" to "junk:UserValue" and > "xmlns:pl" to "xmlns:junk" and it still works!!! Now I am curious as why it > works with "pl" or with some random text as "junk". What matters is the namespace URI (in your case http://www.plmxml.org/Schemas/PLMXMLSchema), the prefix (e.g. 'pl' or 'junk') can be freely choosen, you simply need to bind it to the namespace URI of the elements you want to match. -- Martin Honnen --- MVP XML http://JavaScript.FAQTs.com/