[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
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. :-(
At 09:51 AM 4/18/2002, you wrote:
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Ignoring default attribut, Manny Parasirakis | Thread | [xsl] outputting the document encod, Michael Clark |
[xsl] remote XML with document(), Dan Cederholm | Date | Re: [xsl] Comparing an attribute va, Joerg Heinicke |
Month |
Keywords