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

Re: Extracting Unique element names and attributes fro

Subject: Re: Extracting Unique element names and attributes from a XML file [SEC=UNCLASSIFIED]
From: Enrico.Raymund@xxxxxxxxxxx
Date: Wed, 29 Oct 2008 09:40:32 +1100
Re:  Extracting Unique element names and attributes fro
> In 2.0 you can use distinct-values() or xsl:for-each-group, but it
> always good to learn this technique.

with  XSLT 2.0 using distinct-values and Saxon extensions (saxon:evaluate)
me and my colleague Nick Ardlie, just created this code below yesterday to
list all unique elements and attributes for each element:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:saxon="http://saxon.sf.net/"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes" method="html"/>
    <xsl:variable name="ROOT" select="root()"/>
    <xsl:template match="/">
        <html>
            <body>
                <h1>Elements</h1>
                <ol>
                    <xsl:for-each select="distinct-values(//*/name())">
                        <xsl:sort order="ascending" select="."/>
                        <li>
                            <xsl:value-of select="."/>
                            <xsl:call-template name="LIST_ATTRIBUTES">
                                <xsl:with-param name="ELEMENT" select="."/>
                            </xsl:call-template>
                        </li>
                    </xsl:for-each>
                </ol>
            </body>
        </html>
    </xsl:template>
    <xsl:template name="LIST_ATTRIBUTES">
        <xsl:param name="ELEMENT"/>
        <xsl:variable name="XPATH_EXPR"
select="concat('$p1//*[name()=''',$ELEMENT,''']/@*/name()')"/>
        <xsl:if test="count(distinct-values(saxon:evaluate($XPATH_EXPR,
$ROOT))) &gt; 0">
            <h2>Attributes</h2>
            <ol>
                <xsl:for-each
select="distinct-values(saxon:evaluate($XPATH_EXPR, $ROOT))">
                    <xsl:sort order="ascending" select="."/>
                    <li>
                        <xsl:value-of select="."/>
                    </li>
                </xsl:for-each>
            </ol>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

Enrico Raymundo



                                                                           
             "Andrew Welch"                                                
             <andrew.j.welch@g                                             
             mail.com>                                                  To 
                                            xsl-list@xxxxxxxxxxxxxxxxxxxxx 
             28/10/2008 08:58               m                              
             PM                                                         cc 
                                                                           
                                                                   Subject 
             Please respond to              Re:  Extracting Unique    
             xsl-list@xxxxxxxx              element names and attributes   
              lberrytech.com                from a XML file                
                                                           Protective Mark 
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           



> I need to list out all elements and attribute (unique) in a text file
> for mapping with other XML file.
>
> I am able to get all the elements and attributes but I am unable to
> achieve the uniqueness. Can any body help on this.

> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">

If you are stuck with 1.0 then you need to use a key:

<xsl:key name="names" match="*|@*" use="name()"/>

with

<xsl:for-each select="//*|//*/@*">
  <xsl:if test="generate-id(.) = generate-id(key('names', name(.))[1])">
    <xsl:value-of select="local-name()"/>

In 2.0 you can use distinct-values() or xsl:for-each-group, but it
always good to learn this technique.



--
Andrew Welch
http://andrewjwelch.com
Kernow: http://kernowforsaxon.sf.net/





--------------------------------------------------------------------
Important Notice: If you have received this email by mistake, please advise the sender and delete the message and attachments immediately.  This email, including attachments, may contain confidential, sensitive, legally privileged and/or copyright information.  Any review, retransmission, dissemination or other use of this information by persons or entities other than the intended recipient is prohibited.  DIAC respects your privacy and has obligations under the Privacy Act 1988.  The official departmental privacy policy can be viewed on the department's website at www.immi.gov.au. See: http://www.immi.gov.au/functional/privacy.htm

---------------------------------------------------------------------

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.