|
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 |