schemadom.java
来自「JAVA 所有包」· Java 代码 · 共 450 行 · 第 1/2 页
JAVA
450 行
} else //capturing character calls fAnnotationBuffer.append("</").append(elemName.rawname).append(">"); } void endSyntheticAnnotationElement(QName elemName, boolean complete) { if(complete) { fAnnotationBuffer.append("\n</").append(elemName.rawname).append(">"); // note that this is always called after endElement on <annotation>'s // child and before endElement on annotation. // hence, we must make this the child of the current // parent's only child. parent.fSyntheticAnnotation = fAnnotationBuffer.toString(); // apparently, there is no sensible way of resetting // these things fAnnotationBuffer = null; } else //capturing character calls fAnnotationBuffer.append("</").append(elemName.rawname).append(">"); } void startAnnotationCDATA() { inCDATA = true; fAnnotationBuffer.append("<![CDATA["); } void endAnnotationCDATA() { fAnnotationBuffer.append("]]>"); inCDATA = false; } private void resizeRelations() { NodeImpl[][] temp = new NodeImpl[relations.length+relationsRowResizeFactor][]; System.arraycopy(relations, 0, temp, 0, relations.length); for (int i = relations.length ; i < temp.length ; i++) { temp[i] = new NodeImpl[relationsColResizeFactor]; } relations = temp; } private void resizeRelations(int i) { NodeImpl[] temp = new NodeImpl[relations[i].length+relationsColResizeFactor]; System.arraycopy(relations[i], 0, temp, 0, relations[i].length); relations[i] = temp; } public void reset() { // help out the garbage collector if(relations != null) for(int i=0; i<relations.length; i++) for(int j=0; j<relations[i].length; j++) relations[i][j] = null; relations = new NodeImpl[relationsRowResizeFactor][]; parent = new ElementImpl(0, 0, 0); parent.rawname = "DOCUMENT_NODE"; currLoc = 0; nextFreeLoc = 1; inCDATA = false; for (int i=0; i<relationsRowResizeFactor; i++) { relations[i] = new NodeImpl[relationsColResizeFactor]; } relations[currLoc][0] = parent; } public void printDOM() { /* for (int i=0; i<relations.length; i++) { if (relations[i][0] != null) { for (int j=0; j<relations[i].length; j++) { if (relations[i][j] != null) { System.out.print(relations[i][j].nodeType+"-"+relations[i][j].parentRow+" "); } } System.out.println(""); } } */ //traverse(getDocumentElement(), 0); } // debug methods public static void traverse(Node node, int depth) { indent(depth); System.out.print("<"+node.getNodeName()); if (node.hasAttributes()) { NamedNodeMap attrs = node.getAttributes(); for (int i=0; i<attrs.getLength(); i++) { System.out.print(" "+((Attr)attrs.item(i)).getName()+"=\""+((Attr)attrs.item(i)).getValue()+"\""); } } if (node.hasChildNodes()) { System.out.println(">"); depth+=4; for (Node child = node.getFirstChild(); child != null; child = child.getNextSibling()) { traverse(child, depth); } depth-=4; indent(depth); System.out.println("</"+node.getNodeName()+">"); } else { System.out.println("/>"); } } public static void indent(int amount) { for (int i = 0; i < amount; i++) { System.out.print(' '); } } // org.w3c.dom methods public Element getDocumentElement() { // this returns a parent node, known to be an ElementImpl return (ElementImpl)relations[0][1]; } // commence the serialization of an annotation void startAnnotation(QName elemName, XMLAttributes attributes, NamespaceContext namespaceContext) { if(fAnnotationBuffer == null) fAnnotationBuffer = new StringBuffer(256); fAnnotationBuffer.append("<").append(elemName.rawname).append(" "); // attributes are a bit of a pain. To get this right, we have to keep track // of the namespaces we've seen declared, then examine the namespace context // for other namespaces so that we can also include them. // optimized for simplicity and the case that not many // namespaces are declared on this annotation... Vector namespaces = new Vector(); for (int i = 0; i < attributes.getLength(); ++i) { String aValue = attributes.getValue(i); String aPrefix = attributes.getPrefix(i); String aQName = attributes.getQName(i); // if it's xmlns:* or xmlns, must be a namespace decl if (aPrefix == XMLSymbols.PREFIX_XMLNS || aQName == XMLSymbols.PREFIX_XMLNS) { namespaces.addElement(aPrefix == XMLSymbols.PREFIX_XMLNS ? attributes.getLocalName(i) : XMLSymbols.EMPTY_STRING); } fAnnotationBuffer.append(aQName).append("=\"").append(processAttValue(aValue)).append("\" "); } // now we have to look through currently in-scope namespaces to see what // wasn't declared here Enumeration currPrefixes = namespaceContext.getAllPrefixes(); while(currPrefixes.hasMoreElements()) { String prefix = (String)currPrefixes.nextElement(); String uri = namespaceContext.getURI(prefix); if (uri == null) { uri = XMLSymbols.EMPTY_STRING; } if (!namespaces.contains(prefix)) { // have to declare this one if(prefix == XMLSymbols.EMPTY_STRING) { fAnnotationBuffer.append("xmlns").append("=\"").append(processAttValue(uri)).append("\" "); } else { fAnnotationBuffer.append("xmlns:").append(prefix).append("=\"").append(processAttValue(uri)).append("\" "); } } } fAnnotationBuffer.append(">\n"); } void startAnnotationElement(QName elemName, XMLAttributes attributes) { fAnnotationBuffer.append("<").append(elemName.rawname); for(int i=0; i<attributes.getLength(); i++) { String aValue = attributes.getValue(i); fAnnotationBuffer.append(" ").append(attributes.getQName(i)).append("=\"").append(processAttValue(aValue)).append("\""); } fAnnotationBuffer.append(">"); } private static String processAttValue(String original) { final int length = original.length(); // normally, nothing will happen for (int i = 0; i < length; ++i) { char currChar = original.charAt(i); if (currChar == '"' || currChar == '<' || currChar == '&' || currChar == 0x09 || currChar == 0x0A || currChar == 0x0D) { return escapeAttValue(original, i); } } return original; } private static String escapeAttValue(String original, int from) { int i; final int length = original.length(); StringBuffer newVal = new StringBuffer(length); newVal.append(original.substring(0, from)); for (i = from; i < length; ++i) { char currChar = original.charAt(i); if (currChar == '"') { newVal.append("""); } else if (currChar == '<') { newVal.append("<"); } else if (currChar == '&') { newVal.append("&"); } // Must escape 0x09, 0x0A and 0x0D if they appear in attribute // value so that they may be round-tripped. They would otherwise // be transformed to a 0x20 during attribute value normalization. else if (currChar == 0x09) { newVal.append("	"); } else if (currChar == 0x0A) { newVal.append("
"); } else if (currChar == 0x0D) { newVal.append("
"); } else { newVal.append(currChar); } } return newVal.toString(); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?