Re: [xsl] Ignoring default attributes during XSL transform

Subject: Re: [xsl] Ignoring default attributes during XSL transform
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Thu, 18 Apr 2002 17:03:07 -0400
Manny,

Joerg was correct when he said that the parser has provided the default value before the XSLT processor sees the attribute, so the XSLT processor has no way of knowing whether an attribute given it has its value because it was explicit in the source, or because it was provided by default.

So the short answer is, if you are willing to hard code your stylesheet with the default as a literal (or provide it as a parameter), you can do what you want; but there is no way to test directly whether a given attribute appears as a literal in the source document. For this, you're simply out of luck, since the information in the DTD declarations is simply not part of the data model that the XSLT processor has.

(For those interested in strange arcana of why bizarre syntax is the way it is: the DTD syntax saying an attribute is #IMPLIED, rather than, say, #OPTIONAL, was meant to express, as I understand it, that a default could be provided by a processor (or stylesheet) but was not provided by the DTD.)

So: you can, in effect, test against attribute value "defaults" provided in the stylesheet which *happen* to match those in the DTD; but that's the best you can do.

XML-based schema languages such as XML Schema and RNG allow, in principle, XSLT to query the schema directly -- though even there (as Jeni reminded me not long ago) the various ways it might be done are so numerous that a general solution may be unlikely. :-(

Cheers,
Wendell

At 09:51 AM 4/18/2002, you wrote:
Correct, that I understand. But I am wondering if there is a way to compare the value in the tree with an attribute's default value defined in the DTD. Something like this:

<xsl:apply-templates select="*@[. != '{attribute's default val}']"/>

I would like to only output the attributes which are not the default value to make the outputted xml more readable. I have about 30 attributes but most of then are just set to their default values.

Thank You,
Manny

At 12:23 PM 4/18/2002 +0200, Joerg Heinicke wrote:
As far as I know, the default value (from DTD) of attributes are added by the parser (please correct me if I'm wrong). So when the stylesheet gets the document, every attribute is in the XML tree. But the stylesheet knows nothing about whether it's a default value - the attribute is in the tree, not more, not less.

Regards,

Joerg

Manny Parasirakis wrote:
My follow on question is whether or not there is a way to compare an attribute value to its default value defined in the DTD?
At 10:02 PM 4/17/2002 +0200, Joerg Heinicke wrote:


<xsl:apply-templates select="* | @*[. != '']">

Regards,

Joerg

Manny Parasirakis wrote:

I am trying to figure out how I can ignore outputting attributes whose values are not set (=""). I am fairly new at this but cannot figure it out. I need to do this for all XML tags. Here is my XSL:
<xsl:template match="*|@*">
<xsl:copy>
<xsl:apply-templates select="*|@*"/>
</xsl:copy>
</xsl:template>
I've tried a bunch of things but cannot figure this out.

--


System Development
VIRBUS AG
Fon  +49(0)341-979-7419
Fax  +49(0)341-979-7409
joerg.heinicke@xxxxxxxxx
www.virbus.de


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


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


======================================================================
Wendell Piez                            mailto:wapiez@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc.                http://www.mulberrytech.com
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
----------------------------------------------------------------------
  Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================


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



Current Thread