RE: [xsl] xsl:copy-of O.K. on RTF, but nothing on <EMPTY/> element content (?)

Subject: RE: [xsl] xsl:copy-of O.K. on RTF, but nothing on <EMPTY/> element content (?)
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Thu, 1 May 2003 19:00:33 +0100
I would suggest replacing:

   <xsl:variable name="msg-fill-contents">
      <xsl:for-each select="document($lookupfilename)//msgs/msg">
      <xsl:apply-templates 
 
select="self::node()[@name=$msg-name]/segment[@name=$segment]/markup/nod
e()"/>
      </xsl:for-each>
   </xsl:variable>
<!-- +++++++++++++++++++++++++++++++++++++++++++++++
QUESTION HERE: WHAT TEST WILL CATCH THAT WE HAVE "BROKEN" LOOKUP DATA?
      +++++++++++++++++++++++++++++++++++++++++++++++ -->
<!-- +++ "Nodeset Presence" test: NOT working. +++  -->
   <xsl:when test="$msg-fill-contents">
      <xsl:copy-of select="$msg-fill-contents"/>
   </xsl:when>
   <xsl:otherwise>
      <xsl:text>WARNING: $msg-fill-contents lookup came back EMPTY,
apparently.</xsl:text>   
   </xsl:otherwise>

with:

<xsl:variable name="messages" 
  select="document($lookupfilename)//msgs/
 
msg[@name=$msg-name]/segment[@name=$segment]/markup/node()"/>

<xsl:choose>
<xsl:when test="$messages">
  <xsl:apply-templates select="$messages"/>
<xsl:when>
<xsl:otherwise>
  <xsl:text>WARNING: $msg-fill-contents lookup came back EMPTY,
apparently.</xsl:text>   
</xsl:otherwise>


Michael Kay

> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx 
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of 
> William Reilly
> Sent: 01 May 2003 17:17
> To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE: [xsl] xsl:copy-of O.K. on RTF, but nothing on 
> <EMPTY/> element content (?)
> 
> 
> Greetings.
> 
> This is a long posting, and is follow-up to my question of a 
> week back.
> 
> Below, I have words of thanks for those who ventured a response; 
> a mini-Table-Of-Contents for this posting (!); the pasted in 
> full code 
> (4 files); an entire "Results Matrix"; and a set of URL links to the 
> earlier XSL-List postings.
> 
> There is a "Question" in here (near the top!), the answer to 
> which may be:
> - one of those one-liners I can never think of (à la empty 
> nodeset is select='/..'),
> - a simple admonition, "Don't Do It That Way",
> - or maybe something that'll help me better understand RTFs, 
> nodesets, and 
>    testing for "empty" results.
> 
> Or, of course, may be something else entirely... :>)
> 
> Many Thanks,
> William Reilly
> wreilly@xxxxxxxxxxx
> Boston, Massachusetts U.S.A.
> 
> ===  Briefest Possible (!?) Summary  =======================
> 1.) First, no great surprise, I was in the wrong re: my 
> original question. 
>     I had the _wrong_ xsl:when test (!!)  (details below).
>     So, that part I now understand. Lesson Learned. Good.
> 
> 2.) *However*, while working on all this, I have come upon a new 
>     (closely related) question: 
> 
>  >>> Q. "What is the correct test to catch the following data 
> error (empty/no results)?"  <<<
> 
>    [ Attempt at pre-emptive guess: I think I may have some sort of 
>    "impedance mismatch" (?), as I am trying to test a 
> variable built up 
>    as an RTF, but using a test I call "nodeset presence" 
>    (<xsl:when test="$msg-fill-contents">).  It's not working; 
>    and I don't know what test would work. 
>    *(Please see also "Important Testing Note" ~50 lines below) ]
> 
>   [ If the simple answer is: "Don't Do That" (impedance 
> stuff), then that's fine.  
>      I _do_ now have another solution that _does_ work 
> (nodesets, instead of RTF).
>      I'm just seeking to understand this puzzle a little 
> better... :>} ]
> 
> maindatafile.xml
> ----------------
> <main-msg name="hdr-logo"/>
> 
> lookupfile.xml
> ----------------
> <msg name="hdr-logo">
>    <segment name="CALIFORNIA_BROKEN-WRONG-LOOKUP-DATA">
>       <markup>
>          <img src="california.gif"/> 
>       </markup>
>    </segment>
> </msg>
> 
> lookup-msginfo_2-html.xslt
> --------------------------
> <xsl:variable name="segment" select="'CALIFORNIA'"/>
> <xsl:template match="main-msg">
> <xsl:variable name="msg-name" select="@name"/>
>    <!--  ++++++++++++++++++++++++++++++++++++++++++++++
>          Yes, this is the RTF way to build the variable. 
>          Yes, I know 'select' nodeset way is better. 
>          Bear with me a moment. :>) 
>          ++++++++++++++++++++++++++++  -->
>    <xsl:variable name="msg-fill-contents">
>       <xsl:for-each select="document($lookupfilename)//msgs/msg">
>       <xsl:apply-templates 
>          
> select="self::node()[@name=$msg-name]/segment[@name=$segment]/
> markup/node()"/>
>       </xsl:for-each>
>    </xsl:variable>
> <!-- +++++++++++++++++++++++++++++++++++++++++++++++
> QUESTION HERE: WHAT TEST WILL CATCH THAT WE HAVE "BROKEN" LOOKUP DATA?
>       +++++++++++++++++++++++++++++++++++++++++++++++ -->
> <!-- +++ "Nodeset Presence" test: NOT working. +++  -->
>    <xsl:when test="$msg-fill-contents">
>       <xsl:copy-of select="$msg-fill-contents"/>
>    </xsl:when>
>    <xsl:otherwise>
>       <xsl:text>WARNING: $msg-fill-contents lookup came back 
> EMPTY, apparently.</xsl:text>   
>    </xsl:otherwise>
> </xsl:template>
> 
> ++++++++++++++++++++++++++++++++++++++++++++++++++
> *Important Testing Note:
> This alternative test ("Empty Text") WILL catch the stated 
> problem (hooray), 
> <!-- +++ "Empty Text" test:   
>    <xsl:when test="not($msg-fill-contents='')"> +++  -->
> 
> ***BUT*** this same test is **NOT** then good for the _other_ 
> data problem you 
> might encounter (boo), namely the one I _originally_ wrote in about: 
>    <markup><img src="california.gif"/></markup> 
> or what I term "Empty Element Only Content (NO Whitespace)". 
> This second test FAILS on that (aarghh).  
> 
> >>  So, what I'm _REALLY_ looking for is the test that'll do _BOTH_ 
>     (if I can find one!). <<
> 
> [Why? you might ask. 
> I guess I'd have to say this falls into the "I'd just like to 
> find out" category.]
> 
> [ By the way, yes I'm testing on recent 
>    Xalan (j2sdk1.4.1_01) and Saxon (Instant 6.5.2) ]
> ++++++++++++++++++++++++++++++++++++++++++++++++++
> 
> Output Results 
> (did not work right! did not catch the data error! (by my 
> test, anyway))
> ------------------------------------
> This is what (below, in Results Matrix) I call "FAIL CASE #2"
> I. B. 2. a. = RTF variable | Nodeset test | BROKEN Lookup | WITHSpace
> SHOULD NOT GO THROUGH!!   **TEST FAILS**  
> It does *Not* get caught (by my test, anyway)! Bad.
> 
> (As you can see in the debug output's "$msg-fill-contents copy-of", 
>  there is nothing in there (?). So why doesn't the test catch that?  
>  Must be some lingering node in there, or some such??...)
> 
> DEBUG: WE ARE INSIDE xsl:when test="$msg-fill-contents" was 
> TRUE, apparently.
> $MSG-NAME:  [hdr-logo] 
> $MSG-FILL-CONTENTS VALUE-OF:  [] 
> $MSG-FILL-CONTENTS COPY-OF:  []
> 
> === /End of Briefest Possible (!?) Summary 
> ==============================
> 
> 
> 
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++
> TABLE OF CONTENTS (!)
> 1. Intro, explanation
> 2. 4 Code Files: XML data file; XML lookup file; XSLT; HTML.
> 3. Results Matrix (four-level hierarchy of test permutations)
> 4. "Bibliography" (!) of URL links to related earlier 
> XSL-List postings
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++
> 
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++
>    INTRO, EXPLANATION
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++
> 
> This posting contains all info for the original question:
> William Reilly 2nd e-mail [Wed, 23 Apr 2003 17:30:01 -0400]
> Subj: RE: [xsl] xsl:copy-of O.K. on RTF, but nothing on 
> <EMPTY/> element content (?)
> http://www.biglist.com/lists/xsl-list/archives/200304/msg01138.html
> 
> That original question is now resolved, as I had the wrong 
> xsl:when test!
> 
> I do want to thank Wendell Piez (twice!) and Michael Kay for 
> responding to my 
> rather odd, almost off-putting & bald-faced query:
> +++++++++++++++++++++++++++++++++++++++++++
> CODE #1:<markup> <img src="pic.gif"/></markup>
> +++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++++++
> CODE #2:<markup><img src="pic.gif"/></markup>
> ++++++++++++++++++++++++++++++++++++++++++
> asking why a single space character difference was causing me 
> (I thought) 
> erroneous output.  Fact is, I was testing it erroneously.  
> Lesson Learned: If you're going to test, make sure you're running 
> the right test (!).
> <!-- FLAWED   TEST         <xsl:when 
> test="not($msg-fill-contents='')">  -->
> <!-- CORRECT TEST -->   <xsl:when test="$msg-fill-contents"> 
> 
> I also want to say thanks for the "code tightening" advice. 
> Very useful 
> instruction, and helpful; I now have improved XPath, and a nodeset, 
> no longer RTF.
> 
> Finally, thanks to many recently writing in for a lot of good 
> learning on 
> RTF vs. nodesets generally.
> 
> 
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++
>       CODE: 4 FILES   (XML data file; XML lookup file; XSLT; 
> HTML output)
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++
>    1.   MAINDATAFILE.XML
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++
> === maindatafile.xml 
> =====================================================
> <?xml version="1.0" encoding="UTF-8"?>
> <!-- maindatafile.xml 
>    Author: William Reilly, wreilly@xxxxxxxxxxx  
>    May 1, 2003 -->
> <main>
>    <div id="td01">
>       <main-msg name="hdr-logo"/>
>    </div>
>    <div id="td02">
>       <main-msg name="hdr-nav"/>
>    </div>
>    <div id="body">
>    <p>As an Acme Bank <main-msg 
> name="which-checking-account"/> checking customer, 
>    you may want to consider <main-msg 
> name="which-maximizer-product"/>.</p>
>    </div>
> </main>
> === /maindatafile.xml 
> =====================================================
> 
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++
>    2.   LOOKUPFILE.XML
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++
> ===  lookupfile.xml  
> ========================================================
> <?xml version="1.0" encoding="UTF-8"?>
> <!-- lookupfile.xml 
>    Author: William Reilly, wreilly@xxxxxxxxxxx  
>    May 1, 2003 -->
> <msgs>
>    <msg name="hdr-logo">
> <!-- THREE VARIATIONS ON ONE <SEGMENT> INSTANCE: -->
> <!-- Lookup "Correct"; WITHSpace -->
>       <segment name="CALIFORNIA">
>          <markup> <img src="acmebank.gif" alt="Acme Bank"/></markup>
>       </segment>
> <!-- Lookup "Correct"; WITHOUTSpace 
>       <segment name="CALIFORNIA">
>          <markup><img src="acmebank.gif" alt="Acme Bank"/></markup>
>       </segment>
> -->
> <!-- Lookup "Broken"; (WITHSpace or WITHOUTSpace same results) 
>       <segment 
> name="CALIFORNIA_BROKEN-LOOKUP-SEGMENT-NAME_SHOULD-NOT-WORK">
>          <markup><img src="acmebank.gif" alt="Acme Bank"/></markup>
>       </segment>
> -->
> <!--  /End - THREE VARIATIONS ON ONE <SEGMENT> INSTANCE: -->
> 
> <!-- other segments... -->
>       <segment name="OREGON">
>          <markup>
>             <img src="acmebank.gif" alt="Acme Bank"/>
>          </markup>
>       </segment>
>    </msg>
>    <msg name="hdr-nav">
>       <segment name="CALIFORNIA">
>          <markup>
>             <img src="california-nav.gif" alt="Find It 
> (California) Navigation"/>
>          </markup>
>       </segment>
>       <segment name="OREGON">
>          <markup>
>             <img src="oregon-nav.gif" alt="Contact Us 
> (Oregon) Navigation"/>
>          </markup>
>       </segment>
>    </msg>
>    <msg name="which-checking-account">
>       <segment name="CALIFORNIA">
>          <markup>
>             <b>PremiumGold</b>
>          </markup>
>       </segment>
>       <segment name="OREGON">
>          <markup>
>             <b>AdvantageGreen</b>
>          </markup>
>       </segment>
>    </msg>
>    <msg name="which-maximizer-product">
>       <segment name="CALIFORNIA">
>          <markup>an <a 
> href="http://www.acmebank.com/interest-max.html";>Interest 
> Maximizer account</a>.</markup>
>       </segment>
>       <segment name="OREGON">
>          <markup>a <a 
> href="http://www.acmebank.com/money-max.html";>Money Maximizer 
> account</a>, free of the monthly maintenance fee.*</markup>
>       </segment>
>    </msg>
> </msgs>
> ===  /lookupfile.xml  
> ========================================================
> 
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++
>    3.   LOOKUP-MSGINFO_2-HTML.XSLT
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++
> ===  lookup-msginfo_2-html.xslt  
> ===============================================
> <?xml version="1.0" encoding="UTF-8"?>
> <!-- lookup-msginfo_2-html.xslt 
>    Author: William Reilly, wreilly@xxxxxxxxxxx  
>    May 1, 2003 
>    
>    One Stylesheet with matrix of Four Combinations (comment 
> out as appropriate):
>    - Variable either RTF 'build up' or Nodeset 'select'
>       - then, "xsl:when test" either "Empty Text" or "Nodeset 
> Presence" 
>    (Currently: RTF 'build up' + "Nodeset Presence" test.)
>    -->
> <xsl:stylesheet version="1.0" 
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
>    <xsl:output method="html"/>
> <!-- Would normally be params, not 'hard-coded' variables. 
> (Note these are 'text strings'!) -->
>    <xsl:variable name="lookupfilename" select="'lookupfile.xml'"/>
>    <xsl:variable name="segment" select="'CALIFORNIA'"/>
>    <xsl:variable name="debugging" select="'true'"/>  
> <!--   <xsl:variable name="debugging" select="'false'"/> --> 
>    <xsl:template match="/">
>       <html>
>          <head/>
>          <body>
>             <xsl:apply-templates/>
>          </body>
>       </html>
>    </xsl:template>
>    <xsl:template match="main">
>       <table border="0" cellpadding="0" cellspacing="0" width="560">
>          <tr>
>             <td>
>                <xsl:apply-templates select="div[@id='td01']"/>
>             </td>
>             <td>
>                <xsl:apply-templates select="div[@id='td02']"/>
>             </td>
>          </tr>
>       </table>
>       <div>
>          <xsl:apply-templates select="div[@id='body']"/>
>       </div>
>    </xsl:template>
>    <xsl:template match="b">
>       <span style="font-weight:bold; ">
>          <xsl:apply-templates/>
>       </span>
>    </xsl:template>
>    <xsl:template match="p">
>       <p style="padding-left:20; ">
>          <xsl:apply-templates/>
>       </p>
>    </xsl:template>
>    <xsl:template match="img">
>       <xsl:element name="img">
>          <xsl:copy-of select="@*"/>
>       </xsl:element>
>    </xsl:template>
> 
>    <!-- NODESET 'SELECT' APPROACH TO CREATING VARIABLE. 
>     STEP 1.
>     [!== W. Piez: "Binds the set of msg nodes to the 
> variable, once, globally ==]
>     <xsl:variable name="messages" 
> select="document($basedir_span-fillLookupFilenameExt)//msgs/msg"/> 
>    -->
>    <xsl:template match="main-msg">
>       <xsl:variable name="msg-name" select="@name"/>
>       <!-- NODESET 'SELECT' APPROACH TO CREATING VARIABLE. 
>        STEP 2.
>        [!== W. Piez "tightened up code..."   ==]   
>        <xsl:variable name="msg-fill-contents" 
> select="$messages[@name=$msg-name]/segment[@name=$segment]/markup"/>  
>       -->
>       <!-- RTREEFRAG 'BUILD UP' APPROACH TO CREATING VARIABLE.  -->
>       <xsl:variable name="msg-fill-contents">
>          <xsl:for-each select="document($lookupfilename)//msgs/msg">
>             <xsl:apply-templates 
> select="self::node()[@name=$msg-name]/segment[@name=$segment]/
> markup/node()"/>
>          </xsl:for-each>
>       </xsl:variable>
>       
>       <xsl:choose>
>          <!-- +++++++    TEST # 1  ++++++++++++++++++++++++++ -->
>          <!-- "EMPTY-TEXT" MODE OF TESTING.  
>           <xsl:when test="not($msg-fill-contents='')">  
>             <xsl:if test="$debugging='true'">
>               <xsl:text>DEBUG: WE ARE INSIDE xsl:when 
> test="not($msg-fill-contents='')" was TRUE, apparently.</xsl:text>
>               <xsl:text>$MSG-NAME: </xsl:text> [<xsl:value-of 
> select="$msg-name"/>] 
>               <xsl:text>$MSG-FILL-CONTENTS VALUE-OF: 
> </xsl:text> [<xsl:value-of select="$msg-fill-contents"/>] 
>               <xsl:text>$MSG-FILL-CONTENTS COPY-OF: 
> </xsl:text> [<xsl:copy-of select="$msg-fill-contents"/>]   
>             </xsl:if> -->
> <!-- Comments:   Succeeds WITHSpace,    but Fails WITHOUTSpace.
>    Note: Yes, by the way, this test WILL work correctly if 
> the Lookup file is "Broken,"
>    that is, when there is NOT a match on 'segment' or on 'msg'.
>    (See discussion at Test # 2 below)
> -->
>          <!-- +++++++    TEST # 2  ++++++++++++++++++++++++++ -->
>          <!-- "NODESET-PRESENCE" MODE OF TESTING. -->
>          <xsl:when test="$msg-fill-contents">
>             <xsl:if test="$debugging='true'">
>                <xsl:text>DEBUG: WE ARE INSIDE xsl:when 
> test="$msg-fill-contents" was TRUE, apparently.</xsl:text>
>                <xsl:text>$MSG-NAME: </xsl:text> 
> [<xsl:value-of select="$msg-name"/>] 
>                <xsl:text>$MSG-FILL-CONTENTS VALUE-OF: 
> </xsl:text> [<xsl:value-of select="$msg-fill-contents"/>] 
>                <xsl:text>$MSG-FILL-CONTENTS COPY-OF: 
> </xsl:text> [<xsl:copy-of select="$msg-fill-contents"/>]   
>             </xsl:if> 
> 
> <!-- Comments:    Succeeds BOTH WITHSpace and WITHOUTSpace. 
> Good, but...
> 
>    ******    HOWEVER!  ***********
>    This test was NOT catching when the Lookup File is "Broken."  (!)
>    That is, when there is NOT a match on 'segment' or on 'msg'.
>    [ Please Note: No, in theory this "broken" situation 
> should not occur.
>    BUT, it could, and it's the most critical situation to 
> guard against (!),
>    namely: the Main and Lookup files getting out of synch. ]
> -->
>             <span style="background-color:#D2E9FF; ">
>                <xsl:copy-of select="$msg-fill-contents"/>
>                <!--  <xsl:apply-templates 
> select="$msg-fill-contents"/>  -->
>             </span>
>          </xsl:when>
>          <xsl:otherwise>
>             <xsl:if test="$debugging='true'">
> <!-- TEST # 1 <xsl:text>DEBUG: XSL:OTHERWISE xsl:when 
> test="not($msg-fill-contents='')" was FALSE, 
> apparently.</xsl:text> -->
> <!-- TEST # 2 --> <xsl:text>DEBUG: XSL:OTHERWISE xsl:when 
> test="$msg-fill-contents" was FALSE, apparently.</xsl:text>  
>               <xsl:text>$MSG-NAME: </xsl:text> [<xsl:value-of 
> select="$msg-name"/>] 
>               <xsl:text>$MSG-FILL-CONTENTS VALUE-OF: 
> </xsl:text> [<xsl:value-of select="$msg-fill-contents"/>] 
>               <xsl:text>$MSG-FILL-CONTENTS COPY-OF: 
> </xsl:text> [<xsl:copy-of select="$msg-fill-contents"/>]
>             </xsl:if>
>             <xsl:text>WARNING: $msg-fill-contents lookup came 
> back EMPTY, apparently.</xsl:text>
>             <xsl:message>WARNING: $msg-fill-contents lookup 
> came back EMPTY, apparently.</xsl:message>
>                 </xsl:otherwise>
>       </xsl:choose>
>    </xsl:template>
> </xsl:stylesheet>
> ===  /lookup-msginfo_2-html.xslt  
> =========================================
> 
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++
>    4.   (output) 
> RTF_NODE-TEST_BROKENLOOKUP_WITHSPACE_XALAN_DEBUGOFF.HTML
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++
> === rtf_node-test_brokenlookup_withspace_XALAN_debugoff.html  
> =================
> <html>
> <head>
> <!-- rtf_node-test_brokenlookup_withspace_XALAN_debugoff.html
>    
>    Author: William Reilly, wreilly@xxxxxxxxxxx  
>    May 1, 2003 
> 
>    FAIL CASE #2   (THIS IS THE MOST INTERESTING "FAIL". WHY 
> DOES IT FAIL?)
>    I. B. 2. a. = RTF | Nodeset | BROKEN Lookup | WITHSpace
> -->
> 
> <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
> </head>
> <body>
> <table width="560" cellspacing="0" cellpadding="0" border="0">
> <tr>
> <!-- NOTE: THIS *COMMENTED-OUT* <TD> (pasted in from 
> _*another*_ run's 
>       output) IS HOW A _CORRECT_ TEST WOULD REPORT ON 
> "BROKEN" LOOKUP.  
>       Good. "OK"
>    <td>
>       WARNING: $msg-fill-contents lookup came back EMPTY, apparently.
>    </td>
> -->
> <td> <!-- WHEREAS _THIS_ <TD> (from _this_ run) _MISSES_ THE 
> PROBLEM AND 
>          FAILS TO REPORT IT. Bad. "FAIL"-->
>       <span style="background-color:#D2E9FF; "></span>
>    </td><td>
>       <span style="background-color:#D2E9FF; ">
>             <img src="california-nav.gif" alt="Find It 
> (California) Navigation">
>          </span>
>    </td>
> </tr>
> </table>
> <div>
>    
> <p style="padding-left:20; ">As an Acme Bank <span 
> style="background-color:#D2E9FF; ">
>             <span style="font-weight:bold; ">PremiumGold</span>
>          </span> checking customer, 
>   you may want to consider <span 
> style="background-color:#D2E9FF; ">an Interest Maximizer 
> account.</span>.</p>
>    
> </div>
> </body>
> </html>
> 
> === /rtf_node-test_brokenlookup_withspace_XALAN_debugoff.html 
> =================
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++
>    /END of CODE 
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++
> 
> 
> 
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++
>       RESULTS MATRIX
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++
> 
> ******************* !!PLEASE!! NOTE 
> ****************************************
> - The "OK" or "FAIL" used here below mean: *** "Did The Test 
> Do The Right Thing" ***.
>    That is, it either 
>    - "OK" = correctly caught a problem, or correctly let 
> through O.K. data. Good. "OK"
>         or, it: 
>    - "FAIL" = incorrectly let through a problem, or 
> incorrectly prevented 
>    O.K. data from going through. Bad. "FAIL"
>       
> - These "OK" and "FAIL" are *** NOT *** to be interpreted as 
>    - "The xsl:when test returned boolean true" (or false).   NO.
>    - "The transformation ran to successful completion" (or not).  NO.
> 
> They mean whether or not the test "did the right thing."
> **************************************************************
> ************
> 
> Three things to note >>>>>>>>>:
> I. A. 1. b. -was the original problem I first reported; now 
> understood.
> I. B. 2. a. -is the "most interesting" FAIL: I'd like to learn the 
>                proper 'test' for it.
> II. B. (1. b.) -is obviously the best solution: 'select' a 
> nodeset variable; 
>              then test for "nodeset presence."
> ==============================================================
> ==========
> I.   RTF APPROACH ('built up' variable)
>       A.   "EMPTY-TEXT" Test  <xsl:when 
> test="not($msg-fill-contents='')">
>          1. with... Correct Lookup?
>                a. WITHSpace?      OK
> >>>>>>>>>>>>>   b. WITHOUTSpace   **FAIL** #1 (This was the 
> original problem; 
> now understood: I had the wrong test!)
>          2. with... BROKEN Lookup?  (Broken lookup fails 
> first, and is correctly
>           CAUGHT by the test. Good.)
>                a. WITHSpace?      OK
>                b. WITHOUTSpace   OK
> 
>       B.   "NODESET PRESENCE" Test  <xsl:when 
> test="$msg-fill-contents">
>          1. with... Correct Lookup?
>                a. WITHSpace?      OK
>                b. WITHOUTSpace   OK = INTERESTING SUCCESS 
> CASE (second rank)
>          2. with... BROKEN Lookup?  (Broken lookup should 
> fail (!) first, BUT is
>           incorrectly MISSED (by my test, anyway). Bad.)
> >>>>>>>>>>>>>   a. WITHSpace?      **FAIL** #2 (THIS IS THE 
> MOST INTERESTING "FAIL". 
> WHY DOES IT FAIL?)
>                b. WITHOUTSpace   **FAIL** #3
> 
> --------------------------------------------------------------
> -----------
> II. NODESET APPROACH ('select' variable)
>       A. "EMPTY-TEXT" Test  <xsl:when 
> test="not($msg-fill-contents='')">
>          1. with... Correct Lookup?
>                a. WITHSpace?      OK
>                b. WITHOUTSpace   **FAIL** #4
>          2. with... BROKEN Lookup?  (Broken lookup should 
> fail (!) first, BUT is
>           incorrectly MISSED (by my test, anyway). Bad.)
>                a. WITHSpace?      **FAIL** #5
>                b. WITHOUTSpace   **FAIL** #6
>             
> >>>>   B. "NODESET PRESENCE" Test  <xsl:when 
> test="$msg-fill-contents">
>          1. with... Correct Lookup?
>                a. WITHSpace?      OK
>                b. WITHOUTSpace   OK = INTERESTING SUCCESS 
> CASE (first rank)
>          2. with... BROKEN Lookup?  (Broken lookup fails 
> first, and is 
>          correctly CAUGHT by the test. Good.)
>                a. WITHSpace?      OK
>                b. WITHOUTSpace   OK
> ======================================================================
> 
> Debug Output Results:
> 
> FAIL CASE #1   (This was the original problem; now 
> understood: wrong test!)
> I. A. 1. b. = RTF | Empty-Text | Correct Lookup | WITHOUTSpace
>       SHOULD GO THROUGH!!   **FAIL**  Does *Not* get through  
>       (through my test, anyway)! Bad.
>       (As you can see in the debug output's "copy-of", there 
> is _something_ 
>       in there, but it is "Empty Element Content Only (No 
> Whitespace)".  Hmmm.)
> DEBUG: XSL:OTHERWISE xsl:when 
> test="not($msg-fill-contents='')" was FALSE, apparently.
> $MSG-NAME:  [hdr-logo] 
> $MSG-FILL-CONTENTS VALUE-OF:  [] 
> $MSG-FILL-CONTENTS COPY-OF:  [<img src="acmebank.gif" 
> alt="Acme Bank">]
> WARNING: $msg-fill-contents lookup came back EMPTY, apparently.
>                      
>          
> FAIL CASE #2   (THIS IS THE MOST INTERESTING "FAIL". WHY DOES 
> IT FAIL?)
> (See Also HTML Code pasted in above)
> I. B. 2. a. = RTF | Nodeset | BROKEN Lookup | WITHSpace
>       SHOULD NOT GO THROUGH!!   **FAIL**  It does *Not* get caught 
>       (by my test, anyway)! Bad.
> (As you can see in the debug output's "$msg-fill-contents copy-of", 
>  there is nothing in there (?). So why doesn't the test catch that?  
>  Must be some lingering node in there, or some such??...)
> XALAN (Version: I have Java 1.4.1_01)
> DEBUG: WE ARE INSIDE xsl:when test="$msg-fill-contents" was 
> TRUE, apparently.
> $MSG-NAME:  [hdr-logo] 
> $MSG-FILL-CONTENTS VALUE-OF:  [] 
> $MSG-FILL-CONTENTS COPY-OF:  []
> 
> SAXON (Instant, 6.5.2)
> DEBUG: WE ARE INSIDE xsl:when test="$msg-fill-contents" was 
> TRUE, apparently.
> $MSG-NAME:  [hdr-logo] 
> $MSG-FILL-CONTENTS VALUE-OF:  [] 
> $MSG-FILL-CONTENTS COPY-OF:  []   
> 
> 
> FAIL CASE #3
> I. B. 2. b. = RTF | Nodeset | BROKEN Lookup | WITHOUTSpace
> 
>          { Exactly the same as FAIL CASE #2 } 
>          (with or without space doesn't matter)
> 
> 
> FAIL CASE #4
> II. A. 1. b. = Nodeset | Empty-Text | Correct Lookup | 
> WITHOUTSpace  (Akin to #1)
>       SHOULD GO THROUGH!!   **FAIL**  Does *Not* get through! Bad.
>       (As you can see in the debug output's "copy-of", there is 
>       _something_ in there. (Is this _output_ "Empty Element 
> Content Only 
>       (No Whitespace)"? Doesn't seem to be, for what it's 
> worth...)  Hmmm.)
> DEBUG: XSL:OTHERWISE not($msg-fill-contents='')" was FALSE, apparently
> $msg-name:  [cta-learn-more]
> $msg-fill-contents value-of:  []
> $msg-fill-contents copy-of:  [<markup>
> <image WRsource="images/singlefocus_button_1.gif"></image>
> </markup>]
> WARNING: $msg-fill-contents lookup came back EMPTY, apparently.   
> 
>          
> FAIL CASE #5
> II. A. 2. a. = Nodeset | Empty-Text | BROKEN Lookup | 
> WITHSpace  (Akin to #2)
>       SHOULD NOT GO THROUGH!!   **FAIL**  It does *Not* get caught 
>       (by my test, anyway)! Bad.
>          (As you can see in the debug output's "copy-of", 
> there is nothing 
>          in there (?).)
> DEBUG: WE ARE INSIDE. xsl:when 
> test="not($msg-fill-contents='')" was TRUE, apparently
> $msg-name:  [cta-learn-more]
> $msg-fill-contents value-of:  []
> $msg-fill-contents copy-of:  []   
> 
>                         
> FAIL CASE #6
> II. A. 2. b. = Nodeset | Empty-Text | BROKEN Lookup | WITHOUTSpace
> 
>       { Exactly the same as FAIL CASE #5 } 
>       (with or without space doesn't matter)
> 
> 
> --------------------------------------------------
> INTERESTING SUCCESS CASE (first)(best) This one fixes the 
> original problem.
> II. B. 1. b.  Nodeset | Nodeset | Correct Lookup | WITHOUTSpace
>       SHOULD GO THROUGH!!   **OK**  *Does* get through! Good.
>       (As you can see in the debug output's "copy-of", there is 
>       _something_ in there, AND, we *did* successfully get past the 
>       xsl:when test for "non-empty" $msg-fill-contents.  O.K.)
> DEBUG: WE ARE INSIDE. xsl:when test="$msg-fill-contents" was 
> TRUE, apparently
> $msg-name:  [cta-learn-more]
> $msg-fill-contents value-of:  []
> $msg-fill-contents copy-of:  [<markup>
> <image WRsource="images/singlefocus_button_1.gif"></image>
> </markup>]      
> 
>                
>                
> INTERESTING SUCCESS CASE (second)(qualified)
> I. B. 1. b.  = RTF | Nodeset | Correct Lookup | WITHOUTSpace
>       SHOULD GO THROUGH!!   **OK**  *Does* get through! Good.
>       (As you can see in the debug output's "copy-of", there 
> is _something_ 
>       in there, AND, we *did* successfully get past the xsl:when test 
>       for "non-empty" $msg-fill-contents.  O.K.)
> DEBUG: WE ARE INSIDE. xsl:when test="$msg-fill-contents" was 
> TRUE, apparently
> $msg-name:  [cta-learn-more]
> $msg-fill-contents value-of:  []
> $msg-fill-contents copy-of:  [<img 
> src="images/singlefocus_button_1.gif" alt="">] 
> 
> [...But, note that this "second" SUCCESS CASE in turn FAILS 
> when the Lookup 
>  is BROKEN: I. B. 2. a|b.]
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++
>       /END of RESULTS MATRIX
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++
> 
> 
> 
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++
>    "BIBLIOGRAPHY" - URL links to related earlier XSL-List postings
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++
> 
> === WR E-MAILS ===================================================
> William Reilly 1st e-mail [Tue, 22 Apr 2003 22:10:48 -0400]
> Subj: [xsl] xsl:copy-of O.K. on RTF, but nothing on <EMPTY/> 
> element content (?)
> http://www.biglist.com/lists/xsl-list/archives/200304/msg01075.html
> 
> William Reilly 2nd e-mail [Wed, 23 Apr 2003 17:30:01 -0400]
> Subj: RE: [xsl] xsl:copy-of O.K. on RTF, but nothing on 
> <EMPTY/> element content (?)
> http://www.biglist.com/lists/xsl-list/archives/200304/msg01138.html
> 
> William Reilly 3rd e-mail (response to Leena Kulkarni e-mail) 
>  [Fri, 25 Apr 2003 14:42:52 -0400]
> Subj: RE: [xsl] difference between Result Tree Fragment (RTF) 
> and a nodeset
> http://www.biglist.com/lists/xsl-list/archives/200304/msg01245.html
> === /WR E-MAILS ===================================================
> 
> === RESPONSES =====================================================
> Wendell Piez 1st (response to WR 2nd e-mail) [Fri, 25 Apr 
> 2003 13:44:41 -0400]
> Subj: RE: [xsl] xsl:copy-of O.K. on RTF, but nothing on 
> <EMPTY/> element content (?)
> http://www.biglist.com/lists/xsl-list/archives/200304/msg01244.html
> 
> Wendell Piez 2nd (response to WR 3rd e-mail (response to 
> Leena Kulkarni)) [Fri, 25 Apr 2003 15:43:24 -0400]
> Subj: RE: [xsl] difference between Result Tree Fragment (RTF) 
> and a nodeset
> http://www.biglist.com/lists/xsl-list/archives/200304/msg01246.html
> 
> Michael Kay (response to WR 3rd e-mail (response to Leena 
> Kulkarni)) [Fri, 25 Apr 2003 21:33:23 +0100]
> Subj: RE: [xsl] difference between Result Tree Fragment (RTF) 
> and a nodeset
> http://www.biglist.com/lists/xsl-list/archives/200304/msg01247.html
> 
> G. Ken Holman (response to Leena Kulkarni e-mail) [Fri, 25 
> Apr 2003 12:54:53 -0400]
> Subj: Re: [xsl] difference between Result Tree Fragment (RTF) 
> and a nodeset
> http://www.biglist.com/cgi-bin/wilma/wilma_hiliter/xsl-list/20
0304/msg01234.html
=== /RESPONSES =====================================================
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++
   /END of E-Mail
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread