⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 literalelement.java

📁 java1.6众多例子参考
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		addAttribute(attr);		attr.setParent(this);		attr.parseContents(parser);	    }	}	// Register all namespaces that are in scope, except for those that	// are listed in the xsl:stylesheet element's *-prefixes attributes	final Enumeration include = getNamespaceScope(this);	while (include.hasMoreElements()) {	    final String prefix = (String)include.nextElement();	    if (!prefix.equals("xml")) {		final String uri = lookupNamespace(prefix);		if (uri != null && !stable.isExcludedNamespace(uri)) {		    registerNamespace(prefix, uri, stable, true);		}	    }	}	parseChildren(parser);	// Process all attributes and register all namespaces they use	for (int i = 0; i < count; i++) {	    final QName qname = parser.getQName(_attributes.getQName(i));	    final String val = _attributes.getValue(i);	    // Handle xsl:extension-element-prefixes	    if (qname == parser.getExtensionElementPrefixes()) {		stable.unExcludeNamespaces(val);	    }	    // Handle xsl:exclude-result-prefixes	    else if (qname == parser.getExcludeResultPrefixes()) {		stable.unExcludeNamespaces(val);	    }	}    }    protected boolean contextDependent() {	return dependentContents();    }    /**     * Compiles code that emits the literal element to the output handler,     * first the start tag, then namespace declaration, then attributes,     * then the element contents, and then the element end tag. Since the     * value of an attribute may depend on a variable, variables must be     * compiled first.     */    public void translate(ClassGenerator classGen, MethodGenerator methodGen) {	final ConstantPoolGen cpg = classGen.getConstantPool();	final InstructionList il = methodGen.getInstructionList();        // Check whether all attributes are unique.        _allAttributesUnique = checkAttributesUnique();	// Compile code to emit element start tag	il.append(methodGen.loadHandler());		il.append(new PUSH(cpg, _name));	il.append(DUP2); 		// duplicate these 2 args for endElement	il.append(methodGen.startElement());	// The value of an attribute may depend on a (sibling) variable    int j=0;    while (j < elementCount())    {        final SyntaxTreeNode item = (SyntaxTreeNode) elementAt(j);        if (item instanceof Variable) {            item.translate(classGen, methodGen);            removeElement(item);	// avoid translating it twice            /* When removing an element we do not increment j             * but the removal will reduce the value of elementCount()             * so this loop WILL end. The next iteration will process             * elementAt(j), but with the old element removed             * we are actually processing the next element.             */	    }        else            j++;	}	// Compile code to emit namespace attributes	if (_accessedPrefixes != null) {	    boolean declaresDefaultNS = false;	    Enumeration e = _accessedPrefixes.keys();	    while (e.hasMoreElements()) {		final String prefix = (String)e.nextElement();		final String uri = (String)_accessedPrefixes.get(prefix);		if (uri != Constants.EMPTYSTRING || 			prefix != Constants.EMPTYSTRING) 		{		    if (prefix == Constants.EMPTYSTRING) {			declaresDefaultNS = true;		    }		    il.append(methodGen.loadHandler());		    il.append(new PUSH(cpg,prefix));		    il.append(new PUSH(cpg,uri));		    il.append(methodGen.namespace());		}	    }	    /* 	     * If our XslElement parent redeclares the default NS, and this	     * element doesn't, it must be redeclared one more time.	     */	    if (!declaresDefaultNS && (_parent instanceof XslElement)		    && ((XslElement) _parent).declaresDefaultNS()) 	    {		il.append(methodGen.loadHandler());		il.append(new PUSH(cpg, Constants.EMPTYSTRING));		il.append(new PUSH(cpg, Constants.EMPTYSTRING));		il.append(methodGen.namespace());	    }	}	// Output all attributes	if (_attributeElements != null) {	    final int count = _attributeElements.size();	    for (int i = 0; i < count; i++) {		SyntaxTreeNode node = 		    (SyntaxTreeNode)_attributeElements.elementAt(i);		if (!(node instanceof XslAttribute)) {		    node.translate(classGen, methodGen);	        }	    }	}		// Compile code to emit attributes and child elements	translateContents(classGen, methodGen);	// Compile code to emit element end tag	il.append(methodGen.endElement());    }    /**     * Return true if the output method is html.     */    private boolean isHTMLOutput() {        return getStylesheet().getOutputMethod() == Stylesheet.HTML_OUTPUT;    }        /**     * Return the ElemDesc object for an HTML element.     * Return null if the output method is not HTML or this is not a      * valid HTML element.     */    public ElemDesc getElemDesc() {    	if (isHTMLOutput()) {    	    return ToHTMLStream.getElemDesc(_name);    	}    	else    	    return null;    }        /**     * Return true if all attributes of this LRE have unique names.     */    public boolean allAttributesUnique() {    	return _allAttributesUnique;    }        /**     * Check whether all attributes are unique.     */    private boolean checkAttributesUnique() {    	 boolean hasHiddenXslAttribute = canProduceAttributeNodes(this, true);    	 if (hasHiddenXslAttribute)    	     return false;    	     	 if (_attributeElements != null) {    	     int numAttrs = _attributeElements.size();    	     Hashtable attrsTable = null;    	     for (int i = 0; i < numAttrs; i++) {    	         SyntaxTreeNode node = (SyntaxTreeNode)_attributeElements.elementAt(i);    	             	         if (node instanceof UseAttributeSets) {    	             return false;    	         }    	         else if (node instanceof XslAttribute) {   	                 	             if (attrsTable == null) {    	             	attrsTable = new Hashtable();    	                 for (int k = 0; k < i; k++) {    	                     SyntaxTreeNode n = (SyntaxTreeNode)_attributeElements.elementAt(k);    	                     if (n instanceof LiteralAttribute) {    	                         LiteralAttribute literalAttr = (LiteralAttribute)n;    	                         attrsTable.put(literalAttr.getName(), literalAttr);    	                     }    	                 }    	             }    	                 	             XslAttribute xslAttr = (XslAttribute)node;    	             AttributeValue attrName = xslAttr.getName();    	             if (attrName instanceof AttributeValueTemplate) {    	                 return false;    	             }    	             else if (attrName instanceof SimpleAttributeValue) {    	                 SimpleAttributeValue simpleAttr = (SimpleAttributeValue)attrName;    	                 String name = simpleAttr.toString();    	                 if (name != null && attrsTable.get(name) != null)    	                     return false;    	                 else if (name != null) {    	                     attrsTable.put(name, xslAttr);    	                 }    	                     	             }    	         }    	     }    	 }    	 return true;    }        /**     * Return true if the instructions under the given SyntaxTreeNode can produce attribute nodes     * to an element. Only return false when we are sure that no attribute node is produced.      * Return true if we are not sure. If the flag ignoreXslAttribute is true, the direct      * <xsl:attribute> children of the current node are not included in the check.     */    private boolean canProduceAttributeNodes(SyntaxTreeNode node, boolean ignoreXslAttribute) {    	Vector contents = node.getContents();    	int size = contents.size();    	for (int i = 0; i < size; i++) {    	    SyntaxTreeNode child = (SyntaxTreeNode)contents.elementAt(i);    	    if (child instanceof Text) {    	    	Text text = (Text)child;    	    	if (text.isIgnore())    	    	    continue;    	    	else    	    	    return false;    	    }    	    // Cannot add an attribute to an element after children have been added to it.    	    // We can safely return false when the instruction can produce an output node.   	    else if (child instanceof LiteralElement   	        || child instanceof ValueOf   	        || child instanceof XslElement   	        || child instanceof Comment   	        || child instanceof Number   	        || child instanceof ProcessingInstruction)    	        return false;    	    else if (child instanceof XslAttribute) {    	    	if (ignoreXslAttribute)    	    	    continue;    	    	else    	    	    return true;    	    }    	    // In general, there is no way to check whether <xsl:call-template> or     	    // <xsl:apply-templates> can produce attribute nodes. <xsl:copy> and    	    // <xsl:copy-of> can also copy attribute nodes to an element. Return    	    // true in those cases to be safe.    	    else if (child instanceof CallTemplate    	        || child instanceof ApplyTemplates    	        || child instanceof Copy    	        || child instanceof CopyOf)    	        return true;    	    else if ((child instanceof If    	               || child instanceof ForEach)    	             && canProduceAttributeNodes(child, false)) {     	    	return true;    	    }    	    else if (child instanceof Choose) {    	    	Vector chooseContents = child.getContents();    	    	int num = chooseContents.size();    	    	for (int k = 0; k < num; k++) {    	    	    SyntaxTreeNode chooseChild = (SyntaxTreeNode)chooseContents.elementAt(k);    	    	    if (chooseChild instanceof When || chooseChild instanceof Otherwise) {    	    	    	if (canProduceAttributeNodes(chooseChild, false))    	    	    	    return true;    	    	    }    	    	}    	    }    	}    	return false;    }    }  

⌨️ 快捷键说明

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