xsl-list
[Top] [All Lists]

RE: [xsl] Re: Wrapping problem

2006-08-15 01:49:12
This solution is likely to be O[n^2] with respect to the number of lines in
the play, which could be rather large. A recursive traversal that uses
apply-templates select="following-sibling::*[1]" would be O[n].

Michael Kay
http://www.saxonica.com/ 

-----Original Message-----
From: Mukul Gandhi [mailto:gandhi(_dot_)mukul(_at_)gmail(_dot_)com] 
Sent: 15 August 2006 09:31
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Re: Wrapping problem

Hi Kent,
   Following is a XSLT 1.0 solution to the problem:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

<xsl:output method="xml" indent="yes" />

<xsl:template match="/play">
  <play>
    <xsl:apply-templates select="scene" />
  </play>
</xsl:template>

<xsl:template match="scene">
  <scene name="{.}">
    <xsl:apply-templates select="following-sibling::character">
      <xsl:with-param name="gen-id" select="generate-id()" />
    </xsl:apply-templates>
  </scene>
</xsl:template>

<xsl:template match="character">
  <xsl:param name="gen-id" />

  <xsl:if test="$gen-id = generate-id(preceding-sibling::scene[1])">
    <character name="{.}">
      <xsl:apply-templates select="following-sibling::line">
        <xsl:with-param name="gen-id" select="generate-id()" />
      </xsl:apply-templates>
    </character>
  </xsl:if>
</xsl:template>

<xsl:template match="line">
  <xsl:param name="gen-id" />

  <xsl:if test="$gen-id = 
generate-id(preceding-sibling::character[1])">
    <xsl:copy-of select="." />
  </xsl:if>
</xsl:template>

</xsl:stylesheet>

This stylesheet, when applied to XML:

<play>
  <scene>Scene 1</scene>
  <character>char 1</character>
  <line>blah blah blah</line>
  <line>blah blah blah</line>
  <line>blah blah blah</line>
  <character>char 2</character>
  <line>blah blah blah</line>
  <line>blah blah blah</line>
  <line>blah blah blah</line>
  <character>char 3</character>
  <line>blah blah blah</line>
  <line>blah blah blah</line>
  <line>blah blah blah</line>
  <scene>Scene 2</scene>
  <character>char 1</character>
  <line>blah blah blah</line>
  <line>blah blah blah</line>
  <line>blah blah blah</line>
</play>

Produces output:

<?xml version="1.0" encoding="UTF-8"?>
<play>
   <scene name="Scene 1">
      <character name="char 1">
         <line>blah blah blah</line>
         <line>blah blah blah</line>
         <line>blah blah blah</line>
      </character>
      <character name="char 2">
         <line>blah blah blah</line>
         <line>blah blah blah</line>
         <line>blah blah blah</line>
      </character>
      <character name="char 3">
         <line>blah blah blah</line>
         <line>blah blah blah</line>
         <line>blah blah blah</line>
      </character>
   </scene>
   <scene name="Scene 2">
      <character name="char 1">
         <line>blah blah blah</line>
         <line>blah blah blah</line>
         <line>blah blah blah</line>
      </character>
   </scene>
</play>


On 8/14/06, Kent Seegmiller <hookjaw20(_at_)comcast(_dot_)net> wrote:
My apologies. for not making that clear.  The following is 
my input. I 
want to wrap a script from a play in a file "movie1.xml":
<play>
   <scene>Scene 1</scene>
      <character>char 1</character>
         <line>blah blah blah</line>
         <line>blah blah blah</line>
         <line>blah blah blah</line>
      <character>char 2</character>
         <line>blah blah blah</line>
         <line>blah blah blah</line>
         <line>blah blah blah</line>
      <character>char 3</character>
         <line>blah blah blah</line>
         <line>blah blah blah</line>
         <line>blah blah blah</line>
   <scene>Scene 2</scene>...
      <character>char 1</character>
         <line>blah blah blah</line>
         <line>blah blah blah</line>
         <line>blah blah blah</line> ...
</play>
 The output I want to look like so:
<play>
   <scene name="Scene 1">
      <character name="char 1">
         <line>blah blah blah</line>
         <line>blah blah blah</line>
         <line>blah blah blah</line>
      </character>
      <character name="char 2">
         <line>blah blah blah</line>
         <line>blah blah blah</line>
         <line>blah blah blah</line>
      </character>
      <character name="char 3">
         <line>blah blah blah</line>
         <line>blah blah blah</line>
         <line>blah blah blah</line>
      </character>
   </scene>
   <scene name="Scene 2">
      <character> name="char 1"
         <line>blah blah blah</line>
         <line>blah blah blah</line>
         <line>blah blah blah</line>
      </character>
 ...</scene>
</play>

My question: How do I wrap the scenes and characters.  So far my 
strained brain can only think of creating a text file and using 
"&lt;scene>" or "&lt;character>" to place the end element then 
renaming the text file to xml.
thanks Kent

--
Regards,
Mukul Gandhi

http://gandhimukul.tripod.com

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>