RE: [xsl] Extracting Unique element names and attributes from a XML file [SEC=UNCLASSIFIED]

Subject: RE: [xsl] Extracting Unique element names and attributes from a XML file [SEC=UNCLASSIFIED]
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Tue, 28 Oct 2008 22:56:11 -0000
> 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:

saxon:evaluate seems quite unnecessary here (and will be a lot more
expensive than necessary)

>     <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">

Just do

<xsl:if test="exists($ROOT//*[name()=$ELEMENT]/@*)">

Note: count(X)>0 is equivalent to exists(X), and exists(distinct-values(X))
is equivalent to exists(X).

>                 <xsl:for-each
> select="distinct-values(saxon:evaluate($XPATH_EXPR, $ROOT))">

Here you can do

select="distinct-values($ROOT//*[name()=$ELEMENT]/@*/name())"

Michael Kay
http://www.saxonica.com/

Current Thread