![]() |
![]() | ![]() | ![]() | 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 file Re: Newbie question - adding another layer of depth to XML fileTo: NULL Date: 3/4/2004 5:57:00 AM 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 | |||||
|
