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 + -
显示快捷键?