Subject: Re: [xsl] How to strip off all <xsd:annotation> ...</xsd.annotation> tags From: "Ben Stover" <bxstover@xxxxxxxxxxx> Date: Thu, 13 Aug 2009 17:31:11 +0200 |
Thank you Michael. However I would like to keep the xml:space="preserve" instruction because it ensures that the output is on a minimum human readable format. Without this I have one very, very long line. This is unacceptable for me. Would it help perhaps to move the "xml:space="preserve" instruction to another place in the stylesheet? Maybe something like this: <xsl:template match="@* | node()" xml:space="preserve"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> or <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/ xml:space="preserve"> </xsl:copy> </xsl:template> Sorry, I am not an expert in XSLT. Ben On Thu, 13 Aug 2009 16:52:17 +0200, Michael Ludwig wrote: >Martin Honnen schrieb: >> Ben Stover wrote: >> >>> thank you for your suggestion. Unfortunately your script show the >>> following error (when running with Saxon): >>> XTDE0410: An attribute node (targetNamespace) cannot be created >>> after the children of the containing element at xsl:apply-templates >>> (file:/D:/xslt/Saxon/strip%20annotation%20tags/stripannotationtags.xsl#11) >>> processing /xsd:schema/@targetNamespace >>> in built-in template rule >>> Do you know what's wrong? >> >> I can't explain that error. And I have now tried the stylesheet >> against the schema http://www.w3.org/2001/xml.xsd and it processes >> that without errors. Can you provide a minimal but complete XML input >> document that causes that error? >Ben, please keep things like this on list instead of sending mail >privately. Your stylesheet is not the one Martin posted; you introduced >a significant change: ><xsl:stylesheet xml:space="preserve" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:xsd="http://www.w3.org/2001/XMLSchema" > version="2.0"> > <xsl:template match="xsd:annotation"/> > <xsl:template match="@* | node()"> > <xsl:copy> > <xsl:apply-templates select="@* | node()"/> > </xsl:copy> > </xsl:template> ></xsl:stylesheet> >The xml:space on the xsl:stylesheet is a very bad idea. It leads to >every single whitespace-only text node being relevant, which makes the >stylesheet create whitespace-only text nodes after the <xsl:template> >and after <xsl:copy> (and elsewhere). So child nodes are created >*before* applying templates to attributes. Creating attributes after >having created child nodes is not allowed. >Just to illustrate the principle here, the following will work (but it's >a very odd arrangement, avoid that): > <xsl:template match="@* | node()"><xsl:copy><xsl:apply-templates >select="@* | node()"/> > </xsl:copy> > </xsl:template> >Just get rid of the xml:space="preserve" - it's the source of your >problems. Sometimes you'll want whitespace-only text nodes in your >source tree (XSLT stylesheet module) to be kept and copied, but then >you'll probably also want to localize the effect of the xml:space you >insert to achieve that effect. >-- >Michael Ludwig
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] How to strip off all <xsd, Michael Ludwig | Thread | Re: [xsl] How to strip off all <xsd, Martin Honnen |
Re: [xsl] How to strip off all <xsd, Michael Ludwig | Date | Re: [xsl] How to strip off all <xsd, Martin Honnen |
Month |