[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] Searching text with elements help needed


Subject: Re: [xsl] Searching text with elements help needed
From: Michael Müller-Hillebrand <mmh@xxxxxxxxxxxxx>
Date: Fri, 18 Jun 2010 09:44:15 +0200

Russ,

Without having looked at your solution, how about this (in addition to the
usual identity templates):

<xsl:variable name="prefix" select="'For more information see '"/>

<xsl:template match="Para[CrossReference]">
  <xsl:copy>
    <xsl:for-each select="node()">
      <xsl:choose>
        <xsl:when test="self::CrossReference and
preceding-sibling::node()[1][self::text() and matches(., concat($prefix,
'$'))]">
          <xsl:comment select="'drop CrossReference'"/>
        </xsl:when>
        <xsl:when test="self::text() and matches(., concat($prefix, '$'))">
          <xsl:value-of select="substring-before(., $prefix)"/>
          <xsl:comment select="concat('drop ', $prefix)"/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:apply-templates select="."/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:for-each>
  </xsl:copy>
</xsl:template>

- Michael

Am 18.06.2010 um 01:46 schrieb Russell Urquhart:

> I have been tasked with trying to find a sentence in a <Para> element
similar to the following:
>
> <Para>
> Some text...For more information see
<CrossReference>ItemofInterest</CrossReference>. Some more text, etc.
> </Para>
>
> I have to determine if a sentence of the "For more information see
<CrossReference> </CrossReference>." and, ideally delete it, but i would be
just as happy to put it in comments.
>
> I was trying the following in a template:
>
> <xsl:template match="CrossReference">
>  ***CROSSREFERENCE_FOUND***
>   <xsl:apply-templates/>
> </xsl:template>
> <xsl:template match="Para">
>  <P>
> <!--      <xsl:analyze-string select="." regex="For more
> +information[^\*]*\*\*\*CROSSREFERENCE_FOUND\*\*\*[^\.\?!]*[\.\?!]"> -->
>      <xsl:analyze-string select="." regex="(For more
information[^\.\?!]*[\.\?!])">
>
>        <xsl:matching-substring>
>           <xsl:value-of select="concat('Found', regex-group(1), 'Found
end')" />
>
>        </xsl:matching-substring>
>      </xsl:analyze-string>
>   <xsl:apply-templates/>
>  </P>
> </xsl:template>
>
> Regular <Para> elements are translated to html <P> elements. I had tried to
convert the <CrossReference> element to text thinking that would help the
search process, but no dice.
>
> Can someone shed some light on how i should approach this and or have an
example to share!
>
> Thanks for any help!
>
> Russ

--
_______________________________________________________________
Michael M|ller-Hillebrand: Dokumentations-Technologie
Adobe Certified Expert, FrameMaker
Lvsungen und Training, FrameScript, XML/XSL, Unicode
Blog: http://cap-studio.de/ - Tel. +49 (9131) 28747


Current Thread
Keywords