Re: [xsl] Selecting text between two tags

Subject: Re: [xsl] Selecting text between two tags
From: "Petar Tahchiev" <paranoiabla@xxxxxxxxx>
Date: Sun, 6 Aug 2006 19:29:55 +0300
On 06/08/06, Mukul Gandhi <gandhi.mukul@xxxxxxxxx> wrote:
On 8/6/06, Petar Tahchiev <paranoiabla@xxxxxxxxx> wrote:
> Here is my problem: I have an html file that has a structure like this:
> <html>
> <body>
> <h2>Description</h2>
> <p>Blah-blah</p>
> Some-more <p>-s and text
> <h2>Parameters</h2>
> <p>Some more text<p>
> </body>
> </html>
>
> Now i want to make a xml file that has this structure:
> <m:man>
> <m:description>
> <p>Blah-blah</p>
> Some-more <p>-s and text
> </m:description>
> <some other> things
>  So my question is how to get the text between the first
> <h2>description</h2> and the second <h2>parameters</h2> tag and place
> it in the <m:description></m:description> tag

Given this XML (XHTML) file:

<html>
<body>
<h2>Description</h2>
<p>Blah-blah</p>
Some-more <p/>-s and text
<h2>Parameters</h2>
<p>Some more text</p>
</body>
</html>

The following stylesheet:

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

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

<xsl:template match="/">
  <m:man>
    <xsl:apply-templates select="//h2[1]" />
  </m:man>
</xsl:template>

<xsl:template match="h2">
  <m:description>
    <xsl:call-template name="ExtractText">
      <xsl:with-param name="node-set" select="following-sibling::node()" />
    </xsl:call-template>
  </m:description>
</xsl:template>

<xsl:template name="ExtractText">
  <xsl:param name="node-set" />

  <xsl:if test="not($node-set[1]/self::h2)">
    <xsl:copy-of select="$node-set[1]" />
    <xsl:call-template name="ExtractText">
      <xsl:with-param name="node-set" select="$node-set[position() &gt; 1]" />
    </xsl:call-template>
  </xsl:if>
</xsl:template>

</xsl:stylesheet>

Produces output:

<?xml version="1.0" encoding="UTF-8"?>
<m:man xmlns:m="http://dummy";>
   <m:description>
      <p>Blah-blah</p>
      Some-more <p/>-s and text
   </m:description>
</m:man>

Hope this helps.

--
Regards,
Mukul Gandhi

http://gandhimukul.tripod.com


Thanks a lot :-). That worked!

--
Regards, Petar!
Karlovo, Bulgaria.

Current Thread