[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Omit Data While Using Copy
Charles:
You asked for some clarification. At 04:18 PM 8/11/2004, you wrote: To get to the heart of your problem, when you don't specify a template to use in processing a node, the default template is applied. That built-in template copies the text value of an un-matched node to the output. This is true only of text nodes, whose default template copies its value to the result. For element nodes, the default template simply applies templates to its children. Accordingly, the entire tree is traversed, with any text nodes copied out, which is why the text value of an unmatched node (providing none of its descendants match a template either) appears in output (whether it appeared in one text node or many in the source). In this case, the text value of <titel>. By adding a "no-op" template that matches <titel>, the output will be suppressed: Right. The next thing I noticed was that your template matches "kapitel/hanvisning". The <hanvisning> element has no child elements. Correct. An apply-templates inside it will apply templates to its text node child (the default template if necessary). Note that its attribute is not a child and would not be selected for processing. But since the OP has value-of select="node()", the *value* of that text node is copied out (which is also what would happen by default). A bug would emerge were there more than one text node inside the hanvisning, since value-of select="node()" will get us the value only of the first child node (the value of a node-set in XPath 1.0 being the value of the first node in the set in document order). I am a little puzzled as to why the <titel> element is being processed. It is not a child of <hanvisning>. I had always thought that the default template was applied when <xsl:apply-templates /> is used, but it seems that is incorrect. Perhaps one of those better acquainted with the XSL spec can explain it to us. The <titel> node is being picked up by the (defaulted) traversal of its parent, the <kapitel>, which is being processed (not matching otherwise) by the built-in template for elements, described above. To clarify utterly (I hope), the default template is not applied when <xsl:apply-templates/> is used, but rather whenever a node is selected for processing (i.e. has templates applied to it) which does not match a template explicitly given. If your only template matches "kapitel/hanvisning", the default template will apply to the kapitel itself, as to the titel (its children are processed and text node descendants eventually copied across) and the "text" elements (which disappear since there's nothing inside them to copy). Cheers, Wendell The source: <?xml version="1.0"?> <?xml:stylesheet type='text/xsl' href='manual.xsl'?> <kapitel> <titel>Measures every 10 percussion hours</titel> <text/> <hanvisning from="ID(SEUHS-SLAGVT-10-MATARE13)">Feeder</hanvisning> <text/> <hanvisning from="ID(SEUHS-SLAGVT-10-BOM19)">Boom</hanvisning> <text/> </kapitel> ====================================================================== 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 ======================================================================
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|