elemliteralresult.java

来自「java jdk 1.4的源码」· Java 代码 · 共 773 行 · 第 1/2 页

JAVA
773
字号
  public void setNamespace(String ns)  {    if(null == ns) // defensive, shouldn't have to do this.      ns = "";    m_namespace = ns;  }  /**   * Get the original namespace of the Literal Result Element.   *    * %REVIEW% Why isn't this overriding the getNamespaceURI method   * rather than introducing a new one?   *   * @return The Namespace URI, or the empty string if the   *        element has no Namespace URI.   */  public String getNamespace()  {    return m_namespace;  }  /**   * The local name of the element to be created.   * @serial   */  private String m_localName;  /**   * Set the local name of the LRE.   *   * @param localName The local name (without prefix) of the result element   *                  to be created.   */  public void setLocalName(String localName)  {    m_localName = localName;  }  /**   * Get the local name of the Literal Result Element.   * Note that after resolvePrefixTables has been called, this will   * return the aliased name prefix, not the original stylesheet   * namespace prefix.   *   * @return The local name (without prefix) of the result element   *                  to be created.   */  public String getLocalName()  {    return m_localName;  }  /**   * The raw name of the element to be created.   * @serial   */  private String m_rawName;  /**   * Set the raw name of the LRE.   *   * @param rawName The qualified name (with prefix), or the   *        empty string if qualified names are not available.   */  public void setRawName(String rawName)  {    m_rawName = rawName;  }  /**   * Get the raw name of the Literal Result Element.   *   * @return  The qualified name (with prefix), or the   *        empty string if qualified names are not available.   */  public String getRawName()  {    return m_rawName;  }	 /**   * Get the prefix part of the raw name of the Literal Result Element.   *   * @return The prefix, or the empty string if noprefix was provided.   */  public String getPrefix()  {		int len=m_rawName.length()-m_localName.length()-1;    return (len>0)			? m_rawName.substring(0,len)			: "";  }  /**   * The "extension-element-prefixes" property, actually contains URIs.   * @serial   */  private StringVector m_ExtensionElementURIs;  /**   * Set the "extension-element-prefixes" property.   * @see <a href="http://www.w3.org/TR/xslt#extension-element">extension-element in XSLT Specification</a>   *   * @param v Vector of URIs (not prefixes) to set as the "extension-element-prefixes" property   */  public void setExtensionElementPrefixes(StringVector v)  {    m_ExtensionElementURIs = v;  }  /**   * Get an "extension-element-prefix" property.   * @see <a href="http://www.w3.org/TR/xslt#extension-element">extension-element in XSLT Specification</a>   *   * @param i Index of URI ("extension-element-prefix" property) to get   *   * @return URI at given index ("extension-element-prefix" property)   *   * @throws ArrayIndexOutOfBoundsException   */  public String getExtensionElementPrefix(int i)          throws ArrayIndexOutOfBoundsException  {    if (null == m_ExtensionElementURIs)      throw new ArrayIndexOutOfBoundsException();    return m_ExtensionElementURIs.elementAt(i);  }  /**   * Get the number of "extension-element-prefixes" Strings.   * @see <a href="http://www.w3.org/TR/xslt#extension-element">extension-element in XSLT Specification</a>   *   * @return the number of "extension-element-prefixes" Strings   */  public int getExtensionElementPrefixCount()  {    return (null != m_ExtensionElementURIs)           ? m_ExtensionElementURIs.size() : 0;  }  /**   * Find out if the given "extension-element-prefix" property is defined.   * @see <a href="http://www.w3.org/TR/xslt#extension-element">extension-element in XSLT Specification</a>   *   * @param uri The URI to find   *   * @return True if the given URI is found   */  public boolean containsExtensionElementURI(String uri)  {    if (null == m_ExtensionElementURIs)      return false;    return m_ExtensionElementURIs.contains(uri);  }  /**   * Get an int constant identifying the type of element.   * @see org.apache.xalan.templates.Constants   *   * @return The token ID for this element   */  public int getXSLToken()  {    return Constants.ELEMNAME_LITERALRESULT;  }  /**   * Return the node name.   *   * @return The element's name   */  public String getNodeName()  {    // TODO: Need prefix.    return m_rawName;  }  /**   * The XSLT version as specified by this element.   * @serial   */  private String m_version;  /**   * Set the "version" property.   * @see <a href="http://www.w3.org/TR/xslt#forwards">forwards in XSLT Specification</a>   *   * @param v Version property value to set   */  public void setVersion(String v)  {    m_version = v;  }    /**   * Get the "version" property.   * @see <a href="http://www.w3.org/TR/xslt#forwards">forwards in XSLT Specification</a>   *   * @return Version property value   */  public String getVersion()  {    return m_version;  }  /**   * The "exclude-result-prefixes" property.   * @serial   */  private StringVector m_excludeResultPrefixes;  /**   * Set the "exclude-result-prefixes" property.   * The designation of a namespace as an excluded namespace is   * effective within the subtree of the stylesheet rooted at   * the element bearing the exclude-result-prefixes or   * xsl:exclude-result-prefixes attribute; a subtree rooted   * at an xsl:stylesheet element does not include any stylesheets   * imported or included by children of that xsl:stylesheet element.   * @see <a href="http://www.w3.org/TR/xslt#literal-result-element">literal-result-element in XSLT Specification</a>   *   * @param v vector of prefixes that are resolvable to strings.   */  public void setExcludeResultPrefixes(StringVector v)  {    m_excludeResultPrefixes = v;  }  /**   * Tell if the result namespace decl should be excluded.  Should be called before   * namespace aliasing (I think).   *   * @param prefix Prefix of namespace to check   * @param uri URI of namespace to check   *   * @return True if the given namespace should be excluded   *   * @throws TransformerException   */  private boolean excludeResultNSDecl(String prefix, String uri)          throws TransformerException  {    if (null != m_excludeResultPrefixes)    {      return containsExcludeResultPrefix(prefix, uri);    }    return false;  }    /**   * Copy a Literal Result Element into the Result tree, copy the   * non-excluded namespace attributes, copy the attributes not   * of the XSLT namespace, and execute the children of the LRE.   * @see <a href="http://www.w3.org/TR/xslt#literal-result-element">literal-result-element in XSLT Specification</a>   *   * @param transformer non-null reference to the the current transform-time state.   * @param sourceNode non-null reference to the <a href="http://www.w3.org/TR/xslt#dt-current-node">current source node</a>.   * @param mode reference, which may be null, to the <a href="http://www.w3.org/TR/xslt#modes">current mode</a>.   *   * @throws TransformerException   */  public void execute(          TransformerImpl transformer)            throws TransformerException  {    try    {      ResultTreeHandler rhandler = transformer.getResultTreeHandler();						// JJK Bugzilla 3464, test namespace85 -- make sure LRE's			// namespace is asserted even if default, since xsl:element			// may have changed the context.			rhandler.startPrefixMapping(getPrefix(),getNamespace());      // Add namespace declarations.      executeNSDecls(transformer);      rhandler.startElement(getNamespace(), getLocalName(), getRawName(), null);      try      {        // Process any possible attributes from xsl:use-attribute-sets first        super.execute(transformer);        //xsl:version, excludeResultPrefixes???        // Process the list of avts next        if (null != m_avts)        {          int nAttrs = m_avts.size();          for (int i = (nAttrs - 1); i >= 0; i--)          {            AVT avt = (AVT) m_avts.elementAt(i);            XPathContext xctxt = transformer.getXPathContext();            int sourceNode = xctxt.getCurrentNode();            String stringedValue = avt.evaluate(xctxt, sourceNode, this);            if (null != stringedValue)            {              // Important Note: I'm not going to check for excluded namespace               // prefixes here.  It seems like it's too expensive, and I'm not               // even sure this is right.  But I could be wrong, so this needs               // to be tested against other implementations.							              rhandler.addAttribute(avt.getURI(), avt.getName(),                                    avt.getRawName(), "CDATA", stringedValue);            }          }  // end for        }        // Now process all the elements in this subtree        // TODO: Process m_extensionElementPrefixes && m_attributeSetsNames        transformer.executeChildTemplates(this, true);      }      finally      {        // If you don't do this in a finally statement, an exception could         // cause a system hang.        rhandler.endElement(getNamespace(), getLocalName(), getRawName());        unexecuteNSDecls(transformer);								// JJK Bugzilla 3464, test namespace85 -- balance explicit start.				rhandler.endPrefixMapping(getPrefix());      }    }    catch (org.xml.sax.SAXException se)    {      throw new TransformerException(se);    }  }  /**   * Compiling templates requires that we be able to list the AVTs   * ADDED 9/5/2000 to support compilation experiment   *   * @return an Enumeration of the literal result attributes associated   * with this element.   */  public Enumeration enumerateLiteralResultAttributes()  {    return (null == m_avts) ? null : m_avts.elements();  }      /**     * Accept a visitor and call the appropriate method      * for this class.     *      * @param visitor The visitor whose appropriate method will be called.     * @return true if the children of the object should be visited.     */    protected boolean accept(XSLTVisitor visitor)    {      return visitor.visitLiteralResultElement(this);    }    /**     * Call the children visitors.     * @param visitor The visitor whose appropriate method will be called.     */    protected void callChildVisitors(XSLTVisitor visitor, boolean callAttrs)    {      if (callAttrs && null != m_avts)      {        int nAttrs = m_avts.size();        for (int i = (nAttrs - 1); i >= 0; i--)        {          AVT avt = (AVT) m_avts.elementAt(i);          avt.callVisitors(visitor);        }      }      super.callChildVisitors(visitor, callAttrs);    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?