<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    /*<a name="line.1"></a>
<FONT color="green">002</FONT>     * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<FONT color="green">003</FONT>     * or more contributor license agreements. See the NOTICE file<a name="line.3"></a>
<FONT color="green">004</FONT>     * distributed with this work for additional information<a name="line.4"></a>
<FONT color="green">005</FONT>     * regarding copyright ownership. The ASF licenses this file<a name="line.5"></a>
<FONT color="green">006</FONT>     * to you under the Apache License, Version 2.0 (the  "License");<a name="line.6"></a>
<FONT color="green">007</FONT>     * you may not use this file except in compliance with the License.<a name="line.7"></a>
<FONT color="green">008</FONT>     * You may obtain a copy of the License at<a name="line.8"></a>
<FONT color="green">009</FONT>     *<a name="line.9"></a>
<FONT color="green">010</FONT>     *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<FONT color="green">011</FONT>     *<a name="line.11"></a>
<FONT color="green">012</FONT>     * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
<FONT color="green">013</FONT>     * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
<FONT color="green">014</FONT>     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
<FONT color="green">015</FONT>     * See the License for the specific language governing permissions and<a name="line.15"></a>
<FONT color="green">016</FONT>     * limitations under the License.<a name="line.16"></a>
<FONT color="green">017</FONT>     */<a name="line.17"></a>
<FONT color="green">018</FONT>    /*<a name="line.18"></a>
<FONT color="green">019</FONT>     * $Id: ElemAttribute.java 469304 2006-10-30 22:29:47Z minchau $<a name="line.19"></a>
<FONT color="green">020</FONT>     */<a name="line.20"></a>
<FONT color="green">021</FONT>    package org.apache.xalan.templates;<a name="line.21"></a>
<FONT color="green">022</FONT>    <a name="line.22"></a>
<FONT color="green">023</FONT>    import javax.xml.transform.TransformerException;<a name="line.23"></a>
<FONT color="green">024</FONT>    <a name="line.24"></a>
<FONT color="green">025</FONT>    import org.apache.xalan.res.XSLTErrorResources;<a name="line.25"></a>
<FONT color="green">026</FONT>    import org.apache.xalan.transformer.TransformerImpl;<a name="line.26"></a>
<FONT color="green">027</FONT>    import org.apache.xml.serializer.NamespaceMappings;<a name="line.27"></a>
<FONT color="green">028</FONT>    import org.apache.xml.serializer.SerializationHandler;<a name="line.28"></a>
<FONT color="green">029</FONT>    import org.apache.xml.utils.QName;<a name="line.29"></a>
<FONT color="green">030</FONT>    import org.apache.xml.utils.XML11Char;<a name="line.30"></a>
<FONT color="green">031</FONT>    <a name="line.31"></a>
<FONT color="green">032</FONT>    import org.xml.sax.SAXException;<a name="line.32"></a>
<FONT color="green">033</FONT>    <a name="line.33"></a>
<FONT color="green">034</FONT>    /**<a name="line.34"></a>
<FONT color="green">035</FONT>     * Implement xsl:attribute.<a name="line.35"></a>
<FONT color="green">036</FONT>     * &lt;pre&gt;<a name="line.36"></a>
<FONT color="green">037</FONT>     * &amp;amp;!ELEMENT xsl:attribute %char-template;&gt;<a name="line.37"></a>
<FONT color="green">038</FONT>     * &amp;amp;!ATTLIST xsl:attribute<a name="line.38"></a>
<FONT color="green">039</FONT>     *   name %avt; #REQUIRED<a name="line.39"></a>
<FONT color="green">040</FONT>     *   namespace %avt; #IMPLIED<a name="line.40"></a>
<FONT color="green">041</FONT>     *   %space-att;<a name="line.41"></a>
<FONT color="green">042</FONT>     * &amp;amp;<a name="line.42"></a>
<FONT color="green">043</FONT>     * &lt;/pre&gt;<a name="line.43"></a>
<FONT color="green">044</FONT>     * @see &lt;a href="http://www.w3.org/TR/xslt#creating-attributes"&gt;creating-attributes in XSLT Specification&lt;/a&gt;<a name="line.44"></a>
<FONT color="green">045</FONT>     * @xsl.usage advanced<a name="line.45"></a>
<FONT color="green">046</FONT>     */<a name="line.46"></a>
<FONT color="green">047</FONT>    public class ElemAttribute extends ElemElement<a name="line.47"></a>
<FONT color="green">048</FONT>    {<a name="line.48"></a>
<FONT color="green">049</FONT>        static final long serialVersionUID = 8817220961566919187L;<a name="line.49"></a>
<FONT color="green">050</FONT>    <a name="line.50"></a>
<FONT color="green">051</FONT>      /**<a name="line.51"></a>
<FONT color="green">052</FONT>       * Get an int constant identifying the type of element.<a name="line.52"></a>
<FONT color="green">053</FONT>       * @see org.apache.xalan.templates.Constants<a name="line.53"></a>
<FONT color="green">054</FONT>       *<a name="line.54"></a>
<FONT color="green">055</FONT>       * @return The token ID for this element<a name="line.55"></a>
<FONT color="green">056</FONT>       */<a name="line.56"></a>
<FONT color="green">057</FONT>      public int getXSLToken()<a name="line.57"></a>
<FONT color="green">058</FONT>      {<a name="line.58"></a>
<FONT color="green">059</FONT>        return Constants.ELEMNAME_ATTRIBUTE;<a name="line.59"></a>
<FONT color="green">060</FONT>      }<a name="line.60"></a>
<FONT color="green">061</FONT>    <a name="line.61"></a>
<FONT color="green">062</FONT>      /**<a name="line.62"></a>
<FONT color="green">063</FONT>       * Return the node name.<a name="line.63"></a>
<FONT color="green">064</FONT>       *<a name="line.64"></a>
<FONT color="green">065</FONT>       * @return The element name <a name="line.65"></a>
<FONT color="green">066</FONT>       */<a name="line.66"></a>
<FONT color="green">067</FONT>      public String getNodeName()<a name="line.67"></a>
<FONT color="green">068</FONT>      {<a name="line.68"></a>
<FONT color="green">069</FONT>        return Constants.ELEMNAME_ATTRIBUTE_STRING;<a name="line.69"></a>
<FONT color="green">070</FONT>      }<a name="line.70"></a>
<FONT color="green">071</FONT>    <a name="line.71"></a>
<FONT color="green">072</FONT>      /**<a name="line.72"></a>
<FONT color="green">073</FONT>       * Create an attribute in the result tree.<a name="line.73"></a>
<FONT color="green">074</FONT>       * @see &lt;a href="http://www.w3.org/TR/xslt#creating-attributes"&gt;creating-attributes in XSLT Specification&lt;/a&gt;<a name="line.74"></a>
<FONT color="green">075</FONT>       *<a name="line.75"></a>
<FONT color="green">076</FONT>       * @param transformer non-null reference to the the current transform-time state.<a name="line.76"></a>
<FONT color="green">077</FONT>       *<a name="line.77"></a>
<FONT color="green">078</FONT>       * @throws TransformerException<a name="line.78"></a>
<FONT color="green">079</FONT>       */<a name="line.79"></a>
<FONT color="green">080</FONT>    //  public void execute(<a name="line.80"></a>
<FONT color="green">081</FONT>    //          TransformerImpl transformer)<a name="line.81"></a>
<FONT color="green">082</FONT>    //            throws TransformerException<a name="line.82"></a>
<FONT color="green">083</FONT>    //  {<a name="line.83"></a>
<FONT color="green">084</FONT>        //SerializationHandler rhandler = transformer.getSerializationHandler();<a name="line.84"></a>
<FONT color="green">085</FONT>    <a name="line.85"></a>
<FONT color="green">086</FONT>        // If they are trying to add an attribute when there isn't an <a name="line.86"></a>
<FONT color="green">087</FONT>        // element pending, it is an error.<a name="line.87"></a>
<FONT color="green">088</FONT>        // I don't think we need this check here because it is checked in <a name="line.88"></a>
<FONT color="green">089</FONT>        // ResultTreeHandler.addAttribute.  (is)<a name="line.89"></a>
<FONT color="green">090</FONT>    //    if (!rhandler.isElementPending())<a name="line.90"></a>
<FONT color="green">091</FONT>    //    {<a name="line.91"></a>
<FONT color="green">092</FONT>    //      // Make sure the trace event is sent.<a name="line.92"></a>
<FONT color="green">093</FONT>    //      if (TransformerImpl.S_DEBUG)<a name="line.93"></a>
<FONT color="green">094</FONT>    //        transformer.getTraceManager().fireTraceEvent(this);<a name="line.94"></a>
<FONT color="green">095</FONT>    //<a name="line.95"></a>
<FONT color="green">096</FONT>    //      XPathContext xctxt = transformer.getXPathContext();<a name="line.96"></a>
<FONT color="green">097</FONT>    //      int sourceNode = xctxt.getCurrentNode();<a name="line.97"></a>
<FONT color="green">098</FONT>    //      String attrName = m_name_avt.evaluate(xctxt, sourceNode, this);<a name="line.98"></a>
<FONT color="green">099</FONT>    //      transformer.getMsgMgr().warn(this,<a name="line.99"></a>
<FONT color="green">100</FONT>    //                                   XSLTErrorResources.WG_ILLEGAL_ATTRIBUTE_POSITION,<a name="line.100"></a>
<FONT color="green">101</FONT>    //                                   new Object[]{ attrName });<a name="line.101"></a>
<FONT color="green">102</FONT>    //<a name="line.102"></a>
<FONT color="green">103</FONT>    //      if (TransformerImpl.S_DEBUG)<a name="line.103"></a>
<FONT color="green">104</FONT>    //        transformer.getTraceManager().fireTraceEndEvent(this);<a name="line.104"></a>
<FONT color="green">105</FONT>    //      return;<a name="line.105"></a>
<FONT color="green">106</FONT>    //<a name="line.106"></a>
<FONT color="green">107</FONT>    //      // warn(templateChild, sourceNode, "Trying to add attribute after element child has been added, ignoring...");<a name="line.107"></a>
<FONT color="green">108</FONT>    //    }<a name="line.108"></a>
<FONT color="green">109</FONT>        <a name="line.109"></a>
<FONT color="green">110</FONT>    //    super.execute(transformer);<a name="line.110"></a>
<FONT color="green">111</FONT>        <a name="line.111"></a>
<FONT color="green">112</FONT>    //  }<a name="line.112"></a>
<FONT color="green">113</FONT>      <a name="line.113"></a>
<FONT color="green">114</FONT>      /**<a name="line.114"></a>
<FONT color="green">115</FONT>       * Resolve the namespace into a prefix.  At this level, if no prefix exists, <a name="line.115"></a>
<FONT color="green">116</FONT>       * then return a manufactured prefix.<a name="line.116"></a>
<FONT color="green">117</FONT>       *<a name="line.117"></a>
<FONT color="green">118</FONT>       * @param rhandler The current result tree handler.<a name="line.118"></a>
<FONT color="green">119</FONT>       * @param prefix The probable prefix if already known.<a name="line.119"></a>
<FONT color="green">120</FONT>       * @param nodeNamespace  The namespace, which should not be null.<a name="line.120"></a>
<FONT color="green">121</FONT>       *<a name="line.121"></a>
<FONT color="green">122</FONT>       * @return The prefix to be used.<a name="line.122"></a>
<FONT color="green">123</FONT>       */<a name="line.123"></a>
<FONT color="green">124</FONT>      protected String resolvePrefix(SerializationHandler rhandler,<a name="line.124"></a>
<FONT color="green">125</FONT>                                     String prefix, String nodeNamespace)<a name="line.125"></a>
<FONT color="green">126</FONT>        throws TransformerException<a name="line.126"></a>
<FONT color="green">127</FONT>      {<a name="line.127"></a>
<FONT color="green">128</FONT>    <a name="line.128"></a>
<FONT color="green">129</FONT>        if (null != prefix &amp;&amp; (prefix.length() == 0 || prefix.equals("xmlns")))<a name="line.129"></a>
<FONT color="green">130</FONT>        {<a name="line.130"></a>
<FONT color="green">131</FONT>          // Since we can't use default namespace, in this case we try and <a name="line.131"></a>
<FONT color="green">132</FONT>          // see if a prefix has already been defined or this namespace.<a name="line.132"></a>
<FONT color="green">133</FONT>          prefix = rhandler.getPrefix(nodeNamespace);<a name="line.133"></a>
<FONT color="green">134</FONT>    <a name="line.134"></a>
<FONT color="green">135</FONT>          // System.out.println("nsPrefix: "+nsPrefix);           <a name="line.135"></a>
<FONT color="green">136</FONT>          if (null == prefix || prefix.length() == 0 || prefix.equals("xmlns"))<a name="line.136"></a>
<FONT color="green">137</FONT>          {<a name="line.137"></a>
<FONT color="green">138</FONT>            if(nodeNamespace.length() &gt; 0)<a name="line.138"></a>
<FONT color="green">139</FONT>            {<a name="line.139"></a>
<FONT color="green">140</FONT>                NamespaceMappings prefixMapping = rhandler.getNamespaceMappings();<a name="line.140"></a>
<FONT color="green">141</FONT>                prefix = prefixMapping.generateNextPrefix();<a name="line.141"></a>
<FONT color="green">142</FONT>            }<a name="line.142"></a>
<FONT color="green">143</FONT>            else<a name="line.143"></a>
<FONT color="green">144</FONT>              prefix = "";<a name="line.144"></a>
<FONT color="green">145</FONT>          }<a name="line.145"></a>
<FONT color="green">146</FONT>        }<a name="line.146"></a>
<FONT color="green">147</FONT>        return prefix;<a name="line.147"></a>
<FONT color="green">148</FONT>      }<a name="line.148"></a>
<FONT color="green">149</FONT>      <a name="line.149"></a>
<FONT color="green">150</FONT>      /**<a name="line.150"></a>
<FONT color="green">151</FONT>       * Validate that the node name is good.<a name="line.151"></a>
<FONT color="green">152</FONT>       * <a name="line.152"></a>
<FONT color="green">153</FONT>       * @param nodeName Name of the node being constructed, which may be null.<a name="line.153"></a>
<FONT color="green">154</FONT>       * <a name="line.154"></a>
<FONT color="green">155</FONT>       * @return true if the node name is valid, false otherwise.<a name="line.155"></a>
<FONT color="green">156</FONT>       */<a name="line.156"></a>
<FONT color="green">157</FONT>       protected boolean validateNodeName(String nodeName)<a name="line.157"></a>
<FONT color="green">158</FONT>       {<a name="line.158"></a>
<FONT color="green">159</FONT>          if(null == nodeName)<a name="line.159"></a>
<FONT color="green">160</FONT>            return false;<a name="line.160"></a>
<FONT color="green">161</FONT>          if(nodeName.equals("xmlns"))<a name="line.161"></a>
<FONT color="green">162</FONT>            return false;<a name="line.162"></a>
<FONT color="green">163</FONT>          return XML11Char.isXML11ValidQName(nodeName);<a name="line.163"></a>
<FONT color="green">164</FONT>       }<a name="line.164"></a>
<FONT color="green">165</FONT>      <a name="line.165"></a>
<FONT color="green">166</FONT>      /**<a name="line.166"></a>
<FONT color="green">167</FONT>       * Construct a node in the result tree.  This method is overloaded by <a name="line.167"></a>
<FONT color="green">168</FONT>       * xsl:attribute. At this class level, this method creates an element.<a name="line.168"></a>
<FONT color="green">169</FONT>       *<a name="line.169"></a>
<FONT color="green">170</FONT>       * @param nodeName The name of the node, which may be null.<a name="line.170"></a>
<FONT color="green">171</FONT>       * @param prefix The prefix for the namespace, which may be null.<a name="line.171"></a>
<FONT color="green">172</FONT>       * @param nodeNamespace The namespace of the node, which may be null.<a name="line.172"></a>
<FONT color="green">173</FONT>       * @param transformer non-null reference to the the current transform-time state.<a name="line.173"></a>
<FONT color="green">174</FONT>       * @param sourceNode non-null reference to the &lt;a href="http://www.w3.org/TR/xslt#dt-current-node"&gt;current source node&lt;/a&gt;.<a name="line.174"></a>
<FONT color="green">175</FONT>       * @param mode reference, which may be null, to the &lt;a href="http://www.w3.org/TR/xslt#modes"&gt;current mode&lt;/a&gt;.<a name="line.175"></a>
<FONT color="green">176</FONT>       *<a name="line.176"></a>
<FONT color="green">177</FONT>       * @throws TransformerException<a name="line.177"></a>
<FONT color="green">178</FONT>       */<a name="line.178"></a>
<FONT color="green">179</FONT>      void constructNode(<a name="line.179"></a>
<FONT color="green">180</FONT>              String nodeName, String prefix, String nodeNamespace, TransformerImpl transformer)<a name="line.180"></a>
<FONT color="green">181</FONT>                throws TransformerException<a name="line.181"></a>
<FONT color="green">182</FONT>      {<a name="line.182"></a>
<FONT color="green">183</FONT>    <a name="line.183"></a>
<FONT color="green">184</FONT>        if(null != nodeName &amp;&amp; nodeName.length() &gt; 0)<a name="line.184"></a>
<FONT color="green">185</FONT>        {<a name="line.185"></a>
<FONT color="green">186</FONT>          SerializationHandler rhandler = transformer.getSerializationHandler();<a name="line.186"></a>
<FONT color="green">187</FONT>    <a name="line.187"></a>
<FONT color="green">188</FONT>          // Evaluate the value of this attribute<a name="line.188"></a>
<FONT color="green">189</FONT>          String val = transformer.transformToString(this);<a name="line.189"></a>
<FONT color="green">190</FONT>          try <a name="line.190"></a>
<FONT color="green">191</FONT>          {<a name="line.191"></a>
<FONT color="green">192</FONT>            // Let the result tree handler add the attribute and its String value.<a name="line.192"></a>
<FONT color="green">193</FONT>            String localName = QName.getLocalPart(nodeName);<a name="line.193"></a>
<FONT color="green">194</FONT>            if(prefix != null &amp;&amp; prefix.length() &gt; 0){<a name="line.194"></a>
<FONT color="green">195</FONT>                rhandler.addAttribute(nodeNamespace, localName, nodeName, "CDATA", val, true);<a name="line.195"></a>
<FONT color="green">196</FONT>            }else{<a name="line.196"></a>
<FONT color="green">197</FONT>                rhandler.addAttribute("", localName, nodeName, "CDATA", val, true);<a name="line.197"></a>
<FONT color="green">198</FONT>            }<a name="line.198"></a>
<FONT color="green">199</FONT>          }<a name="line.199"></a>
<FONT color="green">200</FONT>          catch (SAXException e)<a name="line.200"></a>
<FONT color="green">201</FONT>          {<a name="line.201"></a>
<FONT color="green">202</FONT>          }<a name="line.202"></a>
<FONT color="green">203</FONT>        }<a name="line.203"></a>
<FONT color="green">204</FONT>      }<a name="line.204"></a>
<FONT color="green">205</FONT>    <a name="line.205"></a>
<FONT color="green">206</FONT>    <a name="line.206"></a>
<FONT color="green">207</FONT>      /**<a name="line.207"></a>
<FONT color="green">208</FONT>       * Add a child to the child list.<a name="line.208"></a>
<FONT color="green">209</FONT>       * &lt;!ELEMENT xsl:attribute %char-template;&gt;<a name="line.209"></a>
<FONT color="green">210</FONT>       * &lt;!ATTLIST xsl:attribute<a name="line.210"></a>
<FONT color="green">211</FONT>       *   name %avt; #REQUIRED<a name="line.211"></a>
<FONT color="green">212</FONT>       *   namespace %avt; #IMPLIED<a name="line.212"></a>
<FONT color="green">213</FONT>       *   %space-att;<a name="line.213"></a>
<FONT color="green">214</FONT>       * &gt;<a name="line.214"></a>
<FONT color="green">215</FONT>       *<a name="line.215"></a>
<FONT color="green">216</FONT>       * @param newChild Child to append to the list of this node's children<a name="line.216"></a>
<FONT color="green">217</FONT>       *<a name="line.217"></a>
<FONT color="green">218</FONT>       * @return The node we just appended to the children list <a name="line.218"></a>
<FONT color="green">219</FONT>       *<a name="line.219"></a>
<FONT color="green">220</FONT>       * @throws DOMException<a name="line.220"></a>
<FONT color="green">221</FONT>       */<a name="line.221"></a>
<FONT color="green">222</FONT>      public ElemTemplateElement appendChild(ElemTemplateElement newChild)<a name="line.222"></a>
<FONT color="green">223</FONT>      {<a name="line.223"></a>
<FONT color="green">224</FONT>    <a name="line.224"></a>
<FONT color="green">225</FONT>        int type = ((ElemTemplateElement) newChild).getXSLToken();<a name="line.225"></a>
<FONT color="green">226</FONT>    <a name="line.226"></a>
<FONT color="green">227</FONT>        switch (type)<a name="line.227"></a>
<FONT color="green">228</FONT>        {<a name="line.228"></a>
<FONT color="green">229</FONT>    <a name="line.229"></a>
<FONT color="green">230</FONT>        // char-instructions <a name="line.230"></a>
<FONT color="green">231</FONT>        case Constants.ELEMNAME_TEXTLITERALRESULT :<a name="line.231"></a>
<FONT color="green">232</FONT>        case Constants.ELEMNAME_APPLY_TEMPLATES :<a name="line.232"></a>
<FONT color="green">233</FONT>        case Constants.ELEMNAME_APPLY_IMPORTS :<a name="line.233"></a>
<FONT color="green">234</FONT>        case Constants.ELEMNAME_CALLTEMPLATE :<a name="line.234"></a>
<FONT color="green">235</FONT>        case Constants.ELEMNAME_FOREACH :<a name="line.235"></a>
<FONT color="green">236</FONT>        case Constants.ELEMNAME_VALUEOF :<a name="line.236"></a>
<FONT color="green">237</FONT>        case Constants.ELEMNAME_COPY_OF :<a name="line.237"></a>
<FONT color="green">238</FONT>        case Constants.ELEMNAME_NUMBER :<a name="line.238"></a>
<FONT color="green">239</FONT>        case Constants.ELEMNAME_CHOOSE :<a name="line.239"></a>
<FONT color="green">240</FONT>        case Constants.ELEMNAME_IF :<a name="line.240"></a>
<FONT color="green">241</FONT>        case Constants.ELEMNAME_TEXT :<a name="line.241"></a>
<FONT color="green">242</FONT>        case Constants.ELEMNAME_COPY :<a name="line.242"></a>
<FONT color="green">243</FONT>        case Constants.ELEMNAME_VARIABLE :<a name="line.243"></a>
<FONT color="green">244</FONT>        case Constants.ELEMNAME_MESSAGE :<a name="line.244"></a>
<FONT color="green">245</FONT>    <a name="line.245"></a>
<FONT color="green">246</FONT>          // instructions <a name="line.246"></a>
<FONT color="green">247</FONT>          // case Constants.ELEMNAME_PI:<a name="line.247"></a>
<FONT color="green">248</FONT>          // case Constants.ELEMNAME_COMMENT:<a name="line.248"></a>
<FONT color="green">249</FONT>          // case Constants.ELEMNAME_ELEMENT:<a name="line.249"></a>
<FONT color="green">250</FONT>          // case Constants.ELEMNAME_ATTRIBUTE:<a name="line.250"></a>
<FONT color="green">251</FONT>          break;<a name="line.251"></a>
<FONT color="green">252</FONT>        default :<a name="line.252"></a>
<FONT color="green">253</FONT>          error(XSLTErrorResources.ER_CANNOT_ADD,<a name="line.253"></a>
<FONT color="green">254</FONT>                new Object[]{ newChild.getNodeName(),<a name="line.254"></a>
<FONT color="green">255</FONT>                              this.getNodeName() });  //"Can not add " +((ElemTemplateElement)newChild).m_elemName +<a name="line.255"></a>
<FONT color="green">256</FONT>    <a name="line.256"></a>
<FONT color="green">257</FONT>        //" to " + this.m_elemName);<a name="line.257"></a>
<FONT color="green">258</FONT>        }<a name="line.258"></a>
<FONT color="green">259</FONT>    <a name="line.259"></a>
<FONT color="green">260</FONT>        return super.appendChild(newChild);<a name="line.260"></a>
<FONT color="green">261</FONT>      }<a name="line.261"></a>
<FONT color="green">262</FONT>            /**<a name="line.262"></a>
<FONT color="green">263</FONT>             * @see ElemElement#setName(AVT)<a name="line.263"></a>
<FONT color="green">264</FONT>             */<a name="line.264"></a>
<FONT color="green">265</FONT>            public void setName(AVT v) {<a name="line.265"></a>
<FONT color="green">266</FONT>            if (v.isSimple())<a name="line.266"></a>
<FONT color="green">267</FONT>            {<a name="line.267"></a>
<FONT color="green">268</FONT>                if (v.getSimpleString().equals("xmlns"))<a name="line.268"></a>
<FONT color="green">269</FONT>                {<a name="line.269"></a>
<FONT color="green">270</FONT>                    throw new IllegalArgumentException();<a name="line.270"></a>
<FONT color="green">271</FONT>                }<a name="line.271"></a>
<FONT color="green">272</FONT>            }<a name="line.272"></a>
<FONT color="green">273</FONT>                    super.setName(v);<a name="line.273"></a>
<FONT color="green">274</FONT>            }<a name="line.274"></a>
<FONT color="green">275</FONT>    <a name="line.275"></a>
<FONT color="green">276</FONT>    }<a name="line.276"></a>




























































</PRE>
</BODY>
</HTML>
