Re: [xsl] Move a section to different part of the XML tree based on child values

Subject: Re: [xsl] Move a section to different part of the XML tree based on child values
From: "Mukul Gandhi" <gandhi.mukul@xxxxxxxxx>
Date: Tue, 22 Jul 2008 09:27:23 +0530
I think, you can achieve the result by following stylesheet fragment,

<xsl:template match="/Folder">
  <Folder>
    <Section>
      <name>Visible Stations</name>
      <xsl:copy-of select="Placemark[visibility = '1']" />
    </Section>
    <Section>
      <name>Invisible Stations</name>
      <xsl:copy-of select="Placemark[visibility = '0']" />
    </Section>
  </Folder>
</xsl:template>

(not tested ...)

On 7/22/08, Rob Newman <rlnewman@xxxxxxxx> wrote:
> Hi there XML gurus,
>
> I have an XML file with the contents:
>
> output.xml
>
> <Folder>
>    <name>Station List</name>
>    <Placemark>
>       <name>PFO</name>
>       <visibility>1</visibility>
>    </Placemark>
>    <Placemark>
>       <name>MONP2</name>
>       <visibility>1</visibility>
>    </Placemark>
>    <Placemark>
>       <name>MONP</name>
>       <visibility>0</visibility>
>    </Placemark>
>    <Placemark>
>       <name>POTR</name>
>       <visibility>0</visibility>
>    </Placemark>
> </Folder>
>
> Based on the value of the visibility tag, I would like to rearrange the
> output to be split into two sections - 'Visible Stations' and 'Invisible
> Stations':
>
> output_reordered.xml
>
> <Folder>
>    <Section>
>        <name>Visible Stations</name>
>        <Placemark>
>           <name>PFO</name>
>           <visibility>1</visibility>
>        </Placemark>
>        <Placemark>
>           <name>MONP2</name>
>           <visibility>1</visibility>
>        </Placemark>
>    </Section>
>    <Section>
>        <name>Invisible Stations</name>
>        <Placemark>
>           <name>MONP</name>
>           <visibility>0</visibility>
>        </Placemark>
>        <Placemark>
>           <name>POTR</name>
>           <visibility>0</visibility>
>        </Placemark>
>    </Section>
> </Folder>
>
> I have a template that matches on the Folder tag, and I get the value of
> visibility into a variable.
>
> convert.xsl
>
> <xsl:template match="/">
> <Folder>
>    <!-- How do I enter and populate the Sections here? -->
>    <xsl:template match="Folder/Placemark">
>        <xsl:variable name="thisVisible"><xsl:value-of
> select="visibility" /></xsl:variable>
>
>        <!-- Some sort of if/else statement that then moves the Placemark to
> the correct location? -->
>
>        <Placemark>
>            <name><xsl:value-of select="name" /></name>
>            <visibility><xsl:value-of select="visibility" /></visibility>
>        </Placemark>
>    </xsl:template>
> </Folder>
> </xsl:template>
>
> How can I ensure that if the visibility tag is set to 1 it gets inserted
> into the result tree in the right section (in the Folder named Visible
> Stations) and if the tag is set to 0 it gets inserted into the result tree
> in the Invisible Stations tag? I assume I need to create the Sections by
> hand, but then moving the Placemark sections into one of the Sections is the
> part I am stuck on.
>
> Thanks in advance,
> - Rob


-- 
Regards,
Mukul Gandhi

Current Thread