This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Conditional text using attributes -- saxon:evaluate?


Steve, 

Your augmented identity transformation is just what I had in mind --
conditional inclusion based only on attribute names/values.

To further parameterize it, would it be possible to also specify an
attribute name as a parameter along with the value -- if not using
"standard" XSLT, maybe instead with an application-specific extension
function like Saxon's saxon:evaluate?

For example, it would be very nice to be able to do something like:

  saxon test.xml beth.xsl attribute='os' value='PC'

Is that possible?  It would be great not to need to explicitly specify
the attribute name within the stylesheet/transform itself.

   --Mike Smith

(I put one more comment after the following quoted stuff.)


Michael Smith <smith@xml-doc.org> writes:

> | So instead of importing the DocBook templates, might it be possible
> | instead to write a straight XML to XML "conditional inclusion"
> | transform that will work with *any* well-formed XML document instance?
> | 
> | What I mean specifically is a transform that:
> | 
> |   * conditionally includes elements based simply on attribute
> |     names/values, without regard at all for the actual element names
> | 
> |   * is a "standalone" transform that doesn't rely on importing other
> |     stylesheets that contain templates matching the element names
> | 
> | Is that possible? How could it be expressed in XSLT?

Steve Muench <Steve.Muench@oracle.com> writes:

> The following stylesheet augments the identity transformation with a
> template that suppresses copying to the result any element which
> *HAS* an "os" attribute whose value is *different* from the current
> top-level os parameter value.
> 
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
> 
>   <xsl:param name="os">Mac</xsl:param>
> 
>   <!-- Identity Transformation -->
>   <xsl:template match="node()|@*">
>     <xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
>   </xsl:template>
> 
>   <!-- 
>    | If element HAS an os attribute and its value is NOT
>    | what we're looking for, then squelch it
>    +-->
>   <xsl:template match="*[@os and @os!=$os]"/>
> 
> </xsl:stylesheet>
> 
> [...] This assumes that if an element has os="Mac" -- and the
> current value of the $os param = "PC" -- that you want that element
> AND ALL OF ITS CONTENT to be squelched along with it.

I think squelching all of the element's child nodes is exactly what
most document authors would want -- that is, the capability to
recursively exclude whole sections/chunks of documents, along with
excluding simple inline content.

-- 
Michael Smith          mailto:smith@xml-doc.org
XML-Doc                http://www.xml-doc.org/



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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]