xsl-list
[Top] [All Lists]

RE: [xsl] stylesheet not work when xmlns exist

2009-09-26 17:27:23
 
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="{(_at_)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 


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>