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 "<scene>" or "<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>
--~--