Subject: RE: [xsl] How to filter element values... From: "Michael Kay" <mhk@xxxxxxxxx> Date: Wed, 11 Feb 2004 11:08:30 -0000 |
> I could be reading it wrong, but I don't think that section > covers the behavior that I am seeing. The built-in template > calls <xsl:apply-templates mode="m"/>, "which allows > recursive processing to continue in the same mode". I > wouldn't expect the built-in text() and attribute template to > apply to every mode, at least I don't see that described in > the spec... The 1.0 spec could indeed be clearer, and the 2.0 spec is. But there has to be a built-in rule for every node/mode combination, and it seems difficult from the text as written to make your deduction that the built-in rule for a text node in a non-default mode is an empty rule that does nothing. Michael Kay > > I would expect this stylesheet: > > <?xml version="1.0" ?> > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > > <xsl:template match="/"> > <MISSING_MODE> > <xsl:apply-templates mode="MISSING_MODE"/> > </MISSING_MODE> > </xsl:template> > </xsl:stylesheet> > > to output: > > <MISSING_MODE> > </MISSING_MODE> > > and not: > > <MISSING_MODE> > ... all of the text nodes in the xml document ... </MISSING_MODE> > > > Both Xalan and Saxon behave as though there is a built-in > text and attribute template that is equivalent to: > > <xsl:template match="text()|@*" mode="m"> > <xsl:value-of select="."/> > </xsl:template> > > Josh > > *************************** > Subject: RE: [xsl] How to filter element values... > From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> > Date: Sat, 07 Feb 2004 00:17:19 -0500 > Josh, > > There are defaults that apply to each mode, also, as > described in the XSLT Rec, section 5.8: > > > There is also a built-in template rule for each mode, which > allows recursive processing to continue in the same mode in > the absence of a successful pattern match by an explicit > template rule in the stylesheet. This template rule applies > to both element nodes and the root node. The following shows > the equivalent of the built-in template rule for mode m. > > > <xsl:template match="*|/" mode="m"> > <xsl:apply-templates mode="m"/> > </xsl:template> > > > I hope this fills it in for you -- > > > Cheers, > Wendell > > -----Original Message----- > From: Josh Canfield > Sent: Friday, February 06, 2004 4:43 PM > To: 'xsl-list@xxxxxxxxxxxxxxxxxxxxxx' > Subject: RE: [xsl] How to filter element values... > > > It looks like the <xsl:apply-templates mode="g"/> at the > bottom of the Global template is causing the default template > to get invoked. > > Adding a new empty template > > <xsl:template match="Global/text() | EVENT/text()" mode="g"/> > > Will fixes the problem. > > I'm not sure why the default template is being invoked in > this case. I read both http://www.w3.org/TR/xslt#modes and > http://www.w3.org/TR/xslt#built-in-rule and they seem to be > saying that only templates with a matching mode will be invoked. The > > Can anyone explain why this is happening? > > Josh > > -----Original Message----- > From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx > [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of > Kotes Mogili > Sent: Friday, February 06, 2004 12:25 PM > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] How to filter element values... > > > Hi, > > I am using XSL to generate another XSL file from an XML file. > I am interested in only Element names and attributes but not > it's values. for the following XML > > > <SiebelMessage> > <Global param="A" name="Y">aaaaa</Global> > <Global type="if" name="A" select="abcd">bbbb</Global> > <Global type="when" name="Y" select="ccc" > otherwise="bbbbb">ccccc</Global> > > <EVENT > spec="IDL:sciOmSiebelEvents/RouterToOmServer:1.0#OrderCopyEvent\"> > ddddd > </EVENT> > </SiebelMessage> > > I am getting the output as > > <xsl:stylesheet > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> > <xsl:output method="xml" encoding="UTF-8" indent="yes"/> > <xsl:preserve-space elements=""/> > <xsl:strip-space elements="*"/> > <xsl:param name="A"/> > > aaaaa > > <xsl:variable name="A"> > <xsl:value-of select="abcd"/> > </xsl:variable> > > bbbb > > <xsl:variable name="Y"> > <xsl:choose> > <xsl:when test=" "> > <xsl:value-of select=" ccc"/> > </xsl:when> > <xsl:otherwise> > <xsl:value-of select=" bbbbb"/> > </xsl:otherwise> > </xsl:choose> > </xsl:variable> > > ccccc ddddd > > <xsl:template match="*"/> > <xsl:template match="SiebelMessage"/> > <!-- End of SiebelMessage --> > </xsl:stylesheet> > > > I am not sure why the element values are coming when i am not > refering it them. Any suggestions are greatly appreciated.. > > > Thanks > > kotes > > > <!-- ******************* XSL file ********************** --> > > <?xml version="1.0" encoding="UTF-8" ?> > <xsl:stylesheet > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > version="1.0"> <xsl:output method="text"/> > <xsl:strip-space elements="*" /> > <xsl:template match="/"> > <xsl:stylesheet > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> > <xsl:output method="xml" encoding="UTF-8" > indent="yes"/> > <xsl:preserve-space elements=""/> > <xsl:strip-space elements="*"/> > <xsl:apply-templates select="*[Global]" mode="g"/> > <xsl:template match="*"> > </xsl:template> > <xsl:template match="SiebelMessage"> > <!-- <xsl:apply-templates select="SiebelMessage"/> --> > <!-- </xsl:element >--> > </xsl:template > <!-- End of SiebelMessage --> > <!-- <xsl:apply-templates select="*" mode="t" /> --> > </xsl:stylesheet> > </xsl:template> > > <xsl:template match="SiebelMessage"> > <xsl:apply-templates select="EVENT"/> > </xsl:template> > > <xsl:template match="EVENT"> > <xsl:element name="<xsl:value-of > select="name()"/>"> > <xsl:attribute > name="spec"><xsl:value-of select="@spec"/></xsl:attribute> > <xsl:apply-templates/> > </xsl:element > > </xsl:template> > > <xsl:template match="Global" mode="g"> > <xsl:if test="@type='if'"> > <xsl:variable name="<xsl:value-of > select="@name"/>"> > <xsl:if test="@select"> <xsl:value-of > select="<xsl:value-of select="@select"/>"/></xsl:if> > <xsl:if > test="@hardcode"><xsl:text><xsl:value-of > select="@hardcode"/></xsl:text></xsl:if> > </xsl:variable> > </xsl:if> > <xsl:if test="@param"> > <xsl:param name="<xsl:value-of > select="@param"/>"/> > </xsl:if> > <xsl:if test="@type='when' "> > <xsl:variable name="<xsl:value-of > select="@name"/>"> > <xsl:choose> > <xsl:when test=" <xsl:value-of > select="@gtest"></xsl:value-of>"> > <xsl:if test="@select"><xsl:value-of > select=" <xsl:value-of select="@select"/>"/></xsl:if> > <xsl:if > test="@sHardcode"><xsl:text><xsl:value-of > select="@sHardcode"/></xsl:text></xsl:if> > </xsl:when > > <xsl:otherwise> > <xsl:if > test="@otherwise"><xsl:value-of select=" > <xsl:value-of select="@otherwise"/>"/></xsl:if> > <xsl:if > test="@oHardcode"><xsl:text><xsl:value-of > select="@oHardcode"/></xsl:text></xsl:if> > </xsl:otherwise> > </xsl:choose> > </xsl:variable> > </xsl:if> > <xsl:apply-templates mode="g"/> > </xsl:template> > > </xsl:stylesheet> > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] How to filter element val, Josh Canfield | Thread | RE: [xsl] How to filter element val, G. Ken Holman |
RE: [xsl] nodes or multiple runs?, Michael Kay | Date | [xsl] XSL-FO: Space before and afte, Knut Meinke |
Month |