Subject: Re: [xsl] Fwd: text nodes From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> Date: Thu, 18 Sep 2008 10:26:24 -0400 |
<xsl:template match="a"> <xsl:variable name="next_a" select="generate-id(following-sibling::a[1])"/>
<xsl:for-each select="following-sibling::text()[ generate-id( following-sibling::a[1] ) = $next_a ]"> <xsl:value-of select="."/> </xsl:for-each>
</xsl:template>
<xsl:template match="some_element"> <xsl:apply-templates select="a"/> </xsl:template>
<xsl:key name="nodes-by-last-stop" match="node()" use="generate-id(preceding-sibling::a|parent::*)[last()])"/> <!-- using this key, each node in the document can be retrieved using the system-generated ID of the last preceding sibling 'a' element, or of its parent (for those that have no preceding-sibling::a) -->
<xsl:template match="a"> <!-- when 'a' is matched, nothing is done with it, but the elements associated by the key with its generated ID are processed --> <xsl:apply-templates select="key('nodes-by-last-stop',generate-id())"/> </xsl:template>
<xsl:template match="some_element"> <!-- when an element requiring splitting is matched, its own associated elements are processed (these are children that have no 'a' preceding them), then its 'a' children are processed --> <xsl:apply-templates select="key('nodes-by-last-stop',generate-id()"/> <xsl:apply-templates select="a"/> </xsl:template>
<xsl:key name="nodes-by-last-stop" match="node()" use="generate-id(parent::*|preceding-sibling::a|preceding-sibling::lb)[last()])"/>
<xsl:template match="a | lb"> <xsl:apply-templates select="key('nodes-by-last-stop',generate-id())"/> </xsl:template>
<xsl:template match="some_element"> <xsl:apply-templates select="key('nodes-by-last-stop',generate-id()"/> <xsl:apply-templates select="a | lb"/> </xsl:template>
Good luck (and find a way to use XSLT 2.0!), Wendell
Thank you Sam!
i meant by ' stop on the first occurrence on the "[ ]" ' this:
for this input:
<some_element> <a>hello</a> some text 1<br/> some text 2 some text 3 <a>hello 2</a> some text 4 some text 5 some text 6 > </some_element>
i want this output:
"some text 1 some text 2 some text 3" and "some text 4 some text 5 some text 6"
I am not sure how to deal with <br/> elements. I'm using xsl to extract data from HTML. i can't make the xsl you sent me to work. If this info helps you to help me ... let me know.
best regards!
L.
On Wed, Sep 17, 2008 at 10:52 AM, Sam Byland <shbyland@xxxxxxxxxxx> wrote:
>> the output is:
>>
>> "some text 1 some text 2 some text 3"
>
> Lucas,
>
> I used:
>
> <some_element>
> <a>hello</a> some text 1<br/>
> some text 2
> some text 3
> <a>hello 2</a>
> </some_element>
>
> for the input. Assuming you only want to output the text up to the next <a>
> element, then something like this (XSLT1.0) might get you in the right
> direction:
>
> <xsl:template match="a">
>
> <xsl:variable name="next_a"
> select="generate-id(following-sibling::a[1])"/>
>
> <xsl:for-each select="following-sibling::text()[ generate-id(
> following-sibling::a[1] ) = $next_a ]">
> <xsl:value-of select="."/>
> </xsl:for-each>
>
> </xsl:template>
>
> <xsl:template match="some_element">
> <xsl:apply-templates select="a"/>
> </xsl:template>
>
> I'm not totally sure what you meant by ' stop on the first occurrence on the
> "[ ]" '
>
> ...sam
>
====================================================================== Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx Mulberry Technologies, Inc. http://www.mulberrytech.com 17 West Jefferson Street Direct Phone: 301/315-9635 Suite 207 Phone: 301/315-9631 Rockville, MD 20850 Fax: 301/315-8285 ---------------------------------------------------------------------- Mulberry Technologies: A Consultancy Specializing in SGML and XML ======================================================================
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Fwd: text nodes, David Carlisle | Thread | Re: [xsl] Fwd: text nodes, Lucas Lain |
Re: [xsl] Display text and all the , Wendell Piez | Date | RE: [xsl] Fundimentle Predicate Pro, Chris Hughes |
Month |