[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Part B - Generic parse.allXML function

Subject: Re: Part B - Generic parse.allXML function
From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
Date: Sat, 15 May 1999 15:38:50 -0400
xsl sort qname
At 99/05/11 17:33 -0400, David RR Webber wrote:
>OK, continuing this theme, I'm also wanting to explore
>if it is possible in XSL to create a "ListNodes" generic tool.

Yup.

>What I want is to pass any XML, and for the XSL to scan it and
>present a complete list of all the TAGS and ATTRIBUTES used
>in the well formed XML as a HTML table.

The following using XT, based on something James taught us last week, will
produce a result with only one stylesheet.  Since attribute names and
element names could conflict, I go over the data once for elements then
once for attributes.  Each pass involves a (computationally labourious)
repass of the data numerous times.

I'll leave it as an exercise to the reader how to throw the HTML table tags
around what is below, as the below just reports a textual listing in sorted
order of all elements found in the instance followed by all attributes
found in the instance.

I hope this helps.

............ Ken

<?xml version="1.0"?>
<!DOCTYPE xsl:stylesheet [
<!ENTITY nl "&#xA;">
]>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">

<xsl:template match="/">
  <xsl:text>Elements:&nl;</xsl:text>
  <xsl:for-each select="//*">           <!--first do the elements-->
    <xsl:sort select="qname(.)"/>       <!--in order of their names-->
    <xsl:choose>
      <xsl:when test="position()=1">    <!--first in list is unique-->
        <xsl:value-of select="qname(.)"/>
        <xsl:text>&nl;</xsl:text>
      </xsl:when>
      <xsl:otherwise>                   <!--find if next is unique-->
        <xsl:variable name="next" expr="position()+1"/>
        <xsl:variable name="this" expr="qname(.)"/>
        <xsl:for-each select="//*">     <!--review list again-->
          <xsl:sort select="qname(.)"/> <!--same order-->
          <xsl:if test="position() = $next and
                        not( qname(.) = $this )">
            <xsl:value-of select="qname(.)"/> <!--not same as next-->
            <xsl:text>&nl;</xsl:text>
          </xsl:if>
        </xsl:for-each>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:for-each>
  <xsl:text>&nl;Attributes:&nl;</xsl:text>
  <xsl:for-each select="//@*">          <!--do the attributes-->
    <xsl:sort select="qname(.)"/>       <!--in order of their names-->
    <xsl:choose>
      <xsl:when test="position()=1">    <!--first in list is unique-->
        <xsl:value-of select="qname(.)"/>
        <xsl:text>&nl;</xsl:text>
      </xsl:when>
      <xsl:otherwise>                   <!--find if next is unique-->
        <xsl:variable name="next" expr="position()+1"/>
        <xsl:variable name="this" expr="qname(.)"/>
        <xsl:for-each select="//@*">    <!--review list again-->
          <xsl:sort select="qname(.)"/> <!--same order-->
          <xsl:if test="position() = $next and
                        not( qname(.) = $this )">
            <xsl:value-of select="qname(.)"/> <!--not same as next-->
            <xsl:text>&nl;</xsl:text>
          </xsl:if>
        </xsl:for-each>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

--
G. Ken Holman                  mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
Crane Softwrights Ltd.           http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0  +1(613)489-0999  (Fax:-0995)
Website: XSL/XML/DSSSL/SGML services outline,  XSL/DSSSL shareware,
         stylesheet resource library, conference training schedule,
         commercial stylesheet training materials, on-line XSL CBT.


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


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.