Subject: RE: [xsl] stylesheet not work when xmlns exist From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Sat, 26 Sep 2009 22:26:40 +0100 |
> I am on xlst 1.0, > > This is my stylesheet, > > <xsl:template match="/Request"> > <data> > <Elem n="{name(.)}"> > <xsl:for-each select="@*"> > <xsl:if test="name(.)='System'"> > <attr n="{name(.)}"> > <xsl:element name="val"> > <xsl:attribute name="s"> > <xsl:value-of > select="normalize-space(.)"/> > </xsl:attribute> > </xsl:element> > </attr> > </xsl:if> > </xsl:for-each> > <xsl:apply-templates/> > </Elem> > </data> > </xsl:template> > > I only want to get the "System" attribute and ignore all the rest. Then why not replace the xsl:for-each and xsl:if by <xsl:for-each select="@System">? In fact, the whole thing could be rewritten: <xsl:template match="/Request"> <data> <Elem name="Request"> <attr n="System"> <val s="{@System}"/> </attr> </Elem> </data> </xsl:template> > > > THE PROBLEM arise when the input is with xmlns without prefix > "xsi", the output that is output-3 as below: > > input-3: Remove the xsi prefix from xmlns <?xml version="1.0" > encoding="UTF-8"?> <Request xmlns="http://www.abc.com" > System="mysystem"> </Request> > > > I have no idea why "xmlns" is causing problem here? > Because a template written to match an element with local name Request in no namespace will not match an element with local name Request in namespace http://www.abc.com. The namespace is logically part of the element name. Regards, Michael Kay http://www.saxonica.com/ http://twitter.com/michaelhkay
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] stylesheet not work when , David Carlisle | Thread | Re: [xsl] stylesheet not work when , Florent Georges |
Re: [xsl] Use of xsl:apply-template, G. Ken Holman | Date | RE: [xsl] Use of xsl:apply-template, Michael Kay |
Month |