| Subject: [xsl] empty element sabotages xsl:key From: "Nick Ridout" <costempd@xxxxxxxxxx> Date: Tue, 13 Feb 2001 17:26:35 -0500 | 
Just wondered if anyone could explain this?  I was getting results with key
() that I couldn't understand, and after much hair-pulling decided to ask
here.  I deleted a bunch of lines from my input XML so it would be short
enough to post, and all of a sudden key() started working.  So I played
with it until I found an element that, when present, appeared to sabotage
<xsl:key>. Is it illegal for an attribute to be set to null?
<OUTSYSNUMBER CODE=""></OUTSYSNUMBER>
I admit to being backleveled.  I think I'm running Xerces 1.0.3 (Xalan.jar
and Xerces.jar that came with LotusXSL 1.0.1).
Thanks,
Nick Ridout
ps: I hope it's ok to jump in with this question, as I haven't followed
this list in a while.  I did look at DaveP's FAQ (very helpful) and made an
attempt to find something in the archives, but if this has come up before I
missed it.
===========================================
Here's the input XML (including the offending element):
<?xml version="1.0" ?>
<PRCDATA>
  <CONTRACTDATA>
    <COUNTRY CODE="649">649</COUNTRY>
    <AREA>R11</AREA>
    <OUTSYSNUMBER CODE=""></OUTSYSNUMBER>
  </CONTRACTDATA>
  <LINEITEM TYPE="SL">
    <SOURCE>GPE</SOURCE>
    <BCC>3L10</BCC>
  </LINEITEM>
  <LINEITEM TYPE="SL">
    <SOURCE>GPE</SOURCE>
  </LINEITEM>
</PRCDATA>
=======================================
Here's the XSL:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl
="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:key name="type" match="LINEITEM" use="@TYPE"/>
<xsl:template match="/">
  <xsl:apply-templates select="PRCDATA"/>
</xsl:template>
<xsl:template match="PRCDATA">
  <xsl:element name="root">
  <lineitems-by-key>
    <xsl:apply-templates select="key('type','SL')"/>
  </lineitems-by-key>
  <lineitems-by-pattern>
    <xsl:apply-templates select="LINEITEM[@TYPE='SL']"/>
  </lineitems-by-pattern>
  </xsl:element>
</xsl:template>
<xsl:template match="LINEITEM">
  <Type><xsl:value-of select="@TYPE"/></Type>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
=======================================
Here's the output when the offending element is included:
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <lineitems-by-key/>
    <lineitems-by-pattern>
        <Type>SL</Type>
        <Type>SL</Type>
    </lineitems-by-pattern>
</root>
========================================
Here's the output when I remove the offending element:
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <lineitems-by-key>
        <Type>SL</Type>
        <Type>SL</Type>
    </lineitems-by-key>
    <lineitems-by-pattern>
        <Type>SL</Type>
        <Type>SL</Type>
    </lineitems-by-pattern>
</root>
==== END OF POST ===========================
 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
| Current Thread | 
|---|
| 
 | 
| <- Previous | Index | Next -> | 
|---|---|---|
| RE: [xsl] splitting the date field , Modha Kumar | Thread | [xsl] xsl:include still a problem.., Duffey, Kevin | 
| [xsl] splitting the date field in x, Modha Kumar | Date | [xsl] xsl:include still a problem.., Duffey, Kevin | 
| Month |