![]() |
![]() | ![]() | ![]() | Altova Mailing List Archives>Archive Index >microsoft.public.xsl Archive Home >Recent entries >Thread Prev - Re: Newbie question - adding another layer of depth to XML file [Thread Next] Re: Newbie question - adding another layer of depth to XML fileTo: NULL Date: 3/4/2004 2:01:00 PM Yes, you just have to elect which children you want inside the node and code the select="xpath" attributes of templates etc. accordingly. I'll probably post some XSLT this evening to do that (busy at the moment debugging GIS scripts). Chris. "Joe" <josephf@l...> wrote in message news:fad90cce.0403040557.6dd3d70f@p...... Sorry about the code not being invalid...I wrote it quickly as a proof-of-concept. What if the code was more like <?xml version="1.0"?> <root> <Description/> <RegularMedia/> <SomeText/> <SidebarText1>Some Text</SidebarText1> <SidebarMedia1>some media.jpg</SidebarMedia1> <SomeMoreText/> <SomeMoreMedia/> </root> for example, with other sibling tags at the same level as the sidebar tags, and I want the transformation to look like <?xml version="1.0"?> <root> <Description/> <RegularMedia/> <SomeText/> <Sidebar> <SidebarText1>Some Text</SidebarText1> <SidebarMedia1>some media.jpg</SidebarMedia1> </Sidebar> <SomeMoreText/> <SomeMoreMedia/> </root> Is this easily done? Thanks, Joe Finnamore "Chris Barber" <chris@b...> wrote in message news:<eYFgZeXAEHA.1032@T...>... > Your XML is invalid of course (try it in Marrowsoft Xselerator) but the > following should help you (an identity transform with template override for > the <root> node). > > This XML: > > <?xml version="1.0"?> > <root> > <SidebarText1>Some Text</SidebarText1> > <SidebarMedia1>some media.jpg</SidebarMedia1> > </root> > > with this XSLT: > > <?xml version="1.0"?> > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > <xsl:output method="xml" indent="yes" encoding="utf-16" /> > <!-- Identity transform, passes nodes through untouched --> > <xsl:template match="@*|node()|text()"> > <xsl:copy> > <xsl:apply-templates select="@*|node()|text()" /> > </xsl:copy> > </xsl:template> > <!-- Match the root tag and add a new element with the children as children > of the new node --> > <xsl:template match="root"> > <xsl:element name="{name(.)}"> > <SideBar> > <!-- Now add all children of the root node to this new node --> > <xsl:copy-of select="./*"/> > </SideBar> > </xsl:element> > </xsl:template> > </xsl:stylesheet> > > Gives: > > <?xml version="1.0" encoding="utf-16"?> > <root> > <SideBar> > <SidebarText1>Some Text</SidebarText1> > <SidebarMedia1>some media.jpg</SidebarMedia1> > </SideBar> > </root> > > Chris. > > "Joe" <josephf@l...> wrote in message > news:fad90cce.0403031055.5bc75d13@p...... > Hi, > I'm new to xsl, and I was wondering if someone knows how to change: > > <tag1> > <tag2> > <SidebarText1>Some Text</SidebarText1> > <SidebarMedia1>some media.jpg</SidebarMedia1> > ... (other tags starting with Sidebar) > <tag3> > <tag4> > > > into > > <tag1> > <tag2> > <Sidebar> > <SidebarText1>Some Text</SidebarText1> > <SidebarMedia1>some media.jpg</SidebarMedia1> > ... (other tags starting with Sidebar) > </Sidebar> > <tag3> > <tag4> > > > ie. Take all tags starting with Sidebar and moving them as children of > a generic tag called Sidebar. > > > Thanks, > Joe Finnamore | ![]() | ![]() | ![]() |
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | |||||
|
