xsl-list
[Top] [All Lists]

Re: [xsl] difficulty using xsl:analyze-string

2018-07-18 05:18:56
Note that you can achieve what you are doing in 3.0 using the 
unparsed-text-lines() function, and in 2.0 it can be done more simply using 
tokenize() -- 

3.0 with expand-text=yes

<xsl:for-each select="unparsed-text-lines('test.txt')">{.}<br/></xsl:for-each>

2.0:

<xsl:for-each select="tokenize(unparsed-text('test.txt')), 
'\r\n'))"><xsl:value-of select="."/><br/></xsl:for-each>

Michael Kay
Saxonica
  
On 18 Jul 2018, at 11:06, Mukul Gandhi 
gandhi(_dot_)mukul(_at_)gmail(_dot_)com 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:

Thanks, David for the clarifications.

My modified XSLT transform is following,

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform 
<http://www.w3.org/1999/XSL/Transform>"
                         version="2.0">
    
    <xsl:output method="xhtml" 
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd 
<http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>" 
                                                 doctype-public="-//W3C//DTD 
XHTML 1.0 Transitional//EN"/>    
    
    <xsl:template match="/">
        <html xmlns="http://www.w3.org/1999/xhtml 
<http://www.w3.org/1999/xhtml>">
          <head>
             <title>test</title> 
          </head>
          <body>
              <xsl:analyze-string select="unparsed-text('test.txt')" 
regex="\r\n">
                  <xsl:matching-substring>
                      <br/>
                  </xsl:matching-substring>
                  <xsl:non-matching-substring>
                      <xsl:value-of select="."/>
                  </xsl:non-matching-substring>
              </xsl:analyze-string>
          </body>
        </html>
    </xsl:template>
    
</xsl:stylesheet>

Now I'm getting the result from transform, that I desired.

Its worth mentioning about the regex in the xsl:analyze-string above. I'm now 
reading the input for xsl:analyze-string from a text file (the line delimiter 
is \r\n on windows), and don't have to write \\ in the regex. And that makes 
me understand your point, "that example is matching a newline but you wanted 
to match the two characters \n".

On Wed, Jul 18, 2018 at 12:24 PM, David Carlisle 
d(_dot_)p(_dot_)carlisle(_at_)gmail(_dot_)com 
<mailto:d(_dot_)p(_dot_)carlisle(_at_)gmail(_dot_)com> 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com 
<mailto:xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com>> wrote:
I've some other questions as below, related to xsl:analyze-string,

1) The 1st example here, https://www.w3.org/TR/xslt20/#regex-examples 
<https://www.w3.org/TR/xslt20/#regex-examples>

specifies regex as \n. That probably got me wrong.

that example is matching a newline but you wanted to match the two characters 
\n


2) The output I receive, has <br> instead of <br/>. I specified <br/> in my
stylesheet. The output I'm getting might be probably because, I have
<xsl:output method="html"/> in the stylesheet.

yes /> is a syntax error in html4 and specified as invalid but ignored in 
html5

When I change output spec to following, <xsl:output method="xhtml"/> I get
<br></br> in the output.


you would get <br/> for an empty br in the xhtml namespace in xhtml output
but you output br in no-namespace.


When I specify, xsl:output method="xhtml", the following is the complete
output I get,

<?xml version="1.0" encoding="UTF-8"?><html>
   <head>
      <title>test</title>
   </head>
   <body>hello world
      <br></br>experimenting with XSLT
      <br></br>how are you
   </body>
</html>

Shouldn't an XHTML document begin with something like,

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd 
<http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>">

<html xmlns="http://www.w3.org/1999/xhtml <http://www.w3.org/1999/xhtml>">

to get that (which is a very last-century kind of document markup:-)
you need to output elements in the http://www.w3.org/1999/xhtml 
<http://www.w3.org/1999/xhtml>
namespace and specify that dtd in the attributes of xsl:output.

 



-- 
Regards,
Mukul Gandhi
XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
EasyUnsubscribe <-list/293509> (by email <>)
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--
<Prev in Thread] Current Thread [Next in Thread>