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: "William Reilly" <wreilly@xxxxxxxxxxx>
Date: Thu, 1 May 2003 12:16:36 -0400
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/200304/msg01234.html
=== /RESPONSES =====================================================
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   /END of E-Mail
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

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


Current Thread