xsl-list
[Top] [All Lists]

Re: [xsl] removing namespaces

2008-04-01 11:52:41
I'm not totally sure of what you mean by "hiding" a namespace, which is impossible. Either you remove it (which means you change the QName of the elements) or you leave it in. Cleaning up namespaces (putting there declarations on top of the XML) is possible by declaring the namespaces in the xsl:stylesheet declaration element (and I'm sure there are other ways, but I believe that's the way I did it). Then, all you need to do is use the prefixes in your element names:

<xsl:element name="myns:method">.... etc

using an AVT is also ok, as long as it resolves to an existing namespace.

Btw, your code is not complete and as it is, it is a bit misty for me why it creates the output you say it does (you do not show declarations for prefixes "scrcml" and "srcml-new" which are the ones you wanted out of your way because they were not used in all elements, right?).

Anyway, bottom line is: often it is easiest to declare namespaces as early as you can so that you have a clearer document to read.

Cheers,
-- Abel Braaksma



Garvin Riensche wrote:
Hello,

One more namespaces question:

I have this template:

<xsl:template name="addMethod">
  <xsl:element name="method" namespace="http://new.element";>
    <xsl:attribute name="name" select="$method_name"/>
    <xsl:attribute name="id" select="$method_id"/>
    <modifiers>
      <modifier name="{$modifier}"/>
    </modifiers>
    <type name="{$type}"/>
    <block>
      <expr>
        <return>
      <expr>
        <identifier name="{$variable_name}" idref="{$variable_id}"/>
      </expr>
    </return>
      </expr>
    </block>
  </xsl:element>
</xsl:template>

which produces the following output:

<method xmlns="http://new.element"; name="get_j" id="MB1;get_j()">
  <modifiers xmlns:srcml-new="http://new.element"; xmlns="">
    <modifier name="public"/>
  </modifiers>
  <type xmlns:srcml="http://srcml.de";
        xmlns:srcml-new="http://new.element"; xmlns=""
        name="int"/>
<block xmlns:srcml="http://srcml.de"; xmlns:srcml-new="http://new.element"; xmlns="">
    <expr>
       <return>
          <expr>
             <identifier name="j" idref="VCB1;#Cint;j;"/>
          </expr>
       </return>
    </expr>
  </block>
</method>

How do I hide the namespaces of the elements? Is the only possibility to add several xsl:exclude-result-prefixes="..." to the "modifiers", "type" and "block" elements? Or is there another solution?

regards,
Garvin

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





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