Subject: RE: Problem finding set difference on string values
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Tue, 1 Jan 2008 10:52:15 -0000
|
It might be that your input file contains CRLF rather than LF line endings.
The unparsed-text() function does not normalize line endings, and the regex
\n matches LF only. Use normalize-space() after tokenizing, or use \r?\n (or
perhaps even \s+) as the regex in tokenize().
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Mukul Gandhi [mailto:gandhi.mukul@xxxxxxxxx]
> Sent: 01 January 2008 10:20
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Problem finding set difference on string values
>
> Hi all,
> I am facing some problem calculating set difference on
> string values.
>
> The problem details are below.
>
> I have a text file, data.txt which contain information as below:
> abc
> pqr
> mno
> uvw
> (here, each data element is delimited by a newline)
>
> My XSLT 2.0 stylesheet is following:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> version="2.0">
>
> <xsl:output method="text" />
>
> <xsl:variable name="list1"
> select="tokenize(unparsed-text('data.txt'), '\n')" />
> <xsl:variable name="list2" select="('abc', 'pqr', 'ok')" />
>
> <xsl:template match="/">
> <xsl:for-each select="$list2[not(. = $list1)]">
> <xsl:value-of select="." /><xsl:text>
</xsl:text>
> </xsl:for-each>
> </xsl:template>
>
> </xsl:stylesheet>
>
> I want to find elements in 'list2' which are not present in text file.
>
> I am expecting answer:
> ok
>
> But the output produced is:
> abc
> pqr
> ok
>
> What am I doing wrong?
>
> I would appreciate help for this problem ...
>
> I am using Saxon 9-b.
>
> --
> Regards,
> Mukul Gandhi
|