xsl-list
[Top] [All Lists]

[xsl] Finding preceeding-siblings with non empty value

2011-07-22 00:56:31
Hello,

I have xml that comes from a database which creates rows for
changes to a "record".  The complete record is a kind of composite
of all previous rows -- almost so, if the 'model code' changes
it appears that values are reset.  (Apologies that I can't be
more definite with this undocumented Perl code.)

I was having success by looking for the first preceding element
of the same type:

  preceeding[row[site-transaction-name='model code']][1]

But what I want is the first preceeding element that is not empty.
This is complicated by the fact that the elements are grouped,
Could it be this:

  preceding[row[site-transaction-name='model code']][not empty(.)]


Thanks for any tips.

--Hank

Snippet of code showing that I group the rows by date,

<xsl:for-each select="$group/pressure">
   <xsl:choose>
     <!-- If there is a model code, then its a complete record. -->
     <xsl:when test=".[row[site-transaction-name='model code']]">
        <!-- e.g. print the type / model -->
        <xsl:output
select="./row[site-transaction-name='antenna model code']/site-transaction-value" />
     </xsl:when>
<xsl:otherwise>
<!-- This is an update. Find the most recent value from preceeding-siblings. --> <xsl:variable name="ptype" select="preceding[row[site-transaction-name='model code']][1]" />
                                                                                      
                                             </xsl:otherwise>
                                                                        
                                                                </xsl:choose>
                                                                
                                                                                      
                          </xsl:for-each>

--------

The grouped data:


<pressure xmlns="">
   <row>
    <site-transaction-type>pressure sensor</site-transaction-type>
    <site-transaction-name>additional information</site-transaction-name>
    <site-transaction-value>Meteo sonde delivered unreliable data &#xD;
at the end</site-transaction-value>
    <effective-date>1998-11-15T00:00:00.000</effective-date>
   </row>
   <row>
    <site-transaction-type>pressure sensor</site-transaction-type>
    <site-transaction-name>serial number</site-transaction-name>
    <site-transaction-value>69855</site-transaction-value>
    <effective-date>1998-11-15T00:00:00.000</effective-date>
   </row>
   <row>
    <site-transaction-type>pressure sensor</site-transaction-type>
    <site-transaction-name>model code</site-transaction-name>
    <site-transaction-value>PARMT3</site-transaction-value>
    <effective-date>1998-11-15T00:00:00.000</effective-date>
   </row>
   <row>
    <site-transaction-type>pressure sensor</site-transaction-type>
    <site-transaction-name>data frequency</site-transaction-name>
    <site-transaction-value>60 s</site-transaction-value>
    <effective-date>1998-11-15T00:00:00.000</effective-date>
   </row>
   <row>
    <site-transaction-type>pressure sensor</site-transaction-type>
    <site-transaction-name>elev diff to gps</site-transaction-name>
<site-transaction-value>-4 m (with respect to marker)</site-transaction-value>
    <effective-date>1998-11-15T00:00:00.000</effective-date>
   </row>
  </pressure>
  <pressure xmlns="">
   <row>
    <site-transaction-type>pressure sensor</site-transaction-type>
    <site-transaction-name>elev diff to gps</site-transaction-name>
<site-transaction-value>-4 m (with respect to marker)</site-transaction-value>
    <effective-date>2000-07-20T00:00:00.000</effective-date>
   </row>
   <row>
    <site-transaction-type>pressure sensor</site-transaction-type>
    <site-transaction-name>serial number</site-transaction-name>
    <site-transaction-value>70804</site-transaction-value>
    <effective-date>2000-07-20T00:00:00.000</effective-date>
   </row>
  </pressure>
  <pressure xmlns="">
   <row>
    <site-transaction-type>pressure sensor</site-transaction-type>
    <site-transaction-name>elev diff to gps</site-transaction-name>
<site-transaction-value>-3.83 m (with respect to marker)</site-transaction-value>
    <effective-date>2001-02-19T00:00:00.000</effective-date>
   </row>
  </pressure>

--
Louis (Hank) Ratzesberger
sopac.ucsd.edu

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>