node.java

来自「java 3d game jme 工程开发源代码」· Java 代码 · 共 520 行 · 第 1/2 页

JAVA
520
字号

		switch (type) {
			case Attribute:
				if( ((org.w3c.dom.Element)domNode).hasAttributeNS( namespaceURI, name ) == false )
					return null;
				return domNode.getAttributes().getNamedItemNS(namespaceURI, name);

			case Element:
				if( domNode.hasChildNodes() == false )
					return null;
				org.w3c.dom.Node child = domNode.getFirstChild();
				while ( child != null )	{
					if( child.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE )
						if (domNodeNameEquals(child, namespaceURI, name)) {
							org.w3c.dom.Node retElement = child;
							child = null;
							return retElement;
						}
					child = child.getNextSibling();
				}
				return null;

			default:
				throw new XmlException("Unknown type");
		}
	}

	protected org.w3c.dom.Node getDomNextChild( int type, String namespaceURI, String name, org.w3c.dom.Node childNode ) {
		int length, count = 0;

		switch (type) {
			case Attribute:
				return null;

			case Element:
				org.w3c.dom.Node child = childNode;
				if( child != null )
					child = child.getNextSibling();
				while ( child != null ) {
					if (domNodeNameEquals(child, namespaceURI, name))
						return child;
					child = child.getNextSibling();
				}
				return null;

			default:
				throw new XmlException("Unknown type");
		}
	}

	protected org.w3c.dom.Node getDomChild(int type, String namespaceURI, String name) 	{
		return getDomChildAt(type, namespaceURI, name, 0);
	}

	protected org.w3c.dom.Node insertDomChildAt(int type, String namespaceURI, String name, int index, String value) {
		if (type == Attribute) {
			return appendDomChild(type, namespaceURI, name, value);
		} else {
			org.w3c.dom.Element element = domNode.getOwnerDocument().createElementNS(namespaceURI, name);
			element.appendChild(domNode.getOwnerDocument().createTextNode(value));
			return domNode.insertBefore(element, getDomChildAt(Element, namespaceURI, name, index));
		}
	}

	protected org.w3c.dom.Node insertDomElementAt(String namespaceURI, String name, int index, com.jmex.xml.xml.Node srcNode) {
		srcNode.domNode = domNode.insertBefore(
				cloneDomElementAs(namespaceURI, name, srcNode),
				getDomChildAt(Element, namespaceURI, name, index)
				);
		return srcNode.domNode;
	}

	protected org.w3c.dom.Node replaceDomChildAt(int type, String namespaceURI, String name, int index, String value) {
		if (type == Attribute) {
			return appendDomChild(type, namespaceURI, name, value);
		} else {
			org.w3c.dom.Element element = domNode.getOwnerDocument().createElementNS(namespaceURI, name);
			element.appendChild(domNode.getOwnerDocument().createTextNode(value));
			return domNode.replaceChild(element, getDomChildAt(Element, namespaceURI, name, index));
		}
	}

	protected org.w3c.dom.Node replaceDomElementAt(String namespaceURI, String name, int index, com.jmex.xml.xml.Node srcNode) {
		srcNode.domNode = domNode.replaceChild(
				cloneDomElementAs(namespaceURI, name, srcNode),
				getDomChildAt(Element, namespaceURI, name, index)
				);
		return srcNode.domNode;
	}

	protected org.w3c.dom.Node setDomChildAt(int type, String namespaceURI, String name, String value, int index) {
		int length, count = 0;

		switch (type) {
		case Attribute:
			org.w3c.dom.Attr oldAttr = ((org.w3c.dom.Element)domNode).getAttributeNodeNS(namespaceURI, name);
			((org.w3c.dom.Element)domNode).setAttributeNS(namespaceURI, name, value);
			return oldAttr;

		case Element:
			org.w3c.dom.NodeList elements = domNode.getChildNodes();
			length = elements.getLength();
			for (int i = 0; i < length; i++) {
				org.w3c.dom.Node child = elements.item(i);
				if (domNodeNameEquals(child, namespaceURI, name) && count++ == index)
					return child.replaceChild(child.getOwnerDocument().createTextNode(value), child.getFirstChild());
			}
			throw new XmlException("Index out of range");

		default:
			throw new XmlException("Unknown type");
		}
	}

	protected org.w3c.dom.Node setDomChild(int type, String namespaceURI, String name, String value) {
		if (type == Attribute || getDomChildCount(type, namespaceURI, name) > 0) {
			return setDomChildAt(type, namespaceURI, name, value, 0);
		} else {
			appendDomChild(type, namespaceURI, name, value);
			return null;
		}
	}

	protected org.w3c.dom.Node removeDomChildAt(int type, String namespaceURI, String name, int index) {
		int length, count = 0;

		switch (type) {
		case Attribute:
			return domNode.getAttributes().removeNamedItemNS(namespaceURI, name);

		case Element:
			org.w3c.dom.NodeList elements = domNode.getChildNodes();
			length = elements.getLength();
			for (int i = 0; i < length; i++) {
				org.w3c.dom.Node child = elements.item(i);
				if (domNodeNameEquals(child, namespaceURI, name) && count++ == index)
					return domNode.removeChild(child);
			}
			throw new XmlException("Index out of range");

		default:
			throw new XmlException("Unknown type");
		}
	}

	protected org.w3c.dom.Node appendDomElement(String namespaceURI, String name, com.jmex.xml.xml.Node srcNode) {
		srcNode.domNode = domNode.appendChild(cloneDomElementAs(namespaceURI, name, srcNode));
		return srcNode.domNode;
	}

	protected org.w3c.dom.Element cloneDomElementAs(String namespaceURI, String name, com.jmex.xml.xml.Node srcNode) {
		org.w3c.dom.Element newDomNode = domNode.getOwnerDocument().createElementNS(namespaceURI, name);
		org.w3c.dom.Element srcDomNode = (org.w3c.dom.Element)srcNode.domNode;
		org.w3c.dom.Document doc = newDomNode.getOwnerDocument();

		org.w3c.dom.NodeList list = srcDomNode.getChildNodes();
		int length = list.getLength();
		for (int i = 0; i < length; i++)
			newDomNode.appendChild(doc.importNode(list.item(i), true));

		org.w3c.dom.NamedNodeMap srcAttributes = srcDomNode.getAttributes();
		org.w3c.dom.NamedNodeMap newAttributes = newDomNode.getAttributes();
		length = srcAttributes.getLength();
		for (int i = 0; i < length; i++)
			newAttributes.setNamedItemNS((org.w3c.dom.Attr)doc.importNode(srcAttributes.item(i), false));

		return newDomNode;
	}

	protected void cloneInto(org.w3c.dom.Element newDomNode) {
		while (domNode.getFirstChild() != null) {
			org.w3c.dom.Node n = newDomNode.getOwnerDocument().importNode(domNode.getFirstChild(), true);
			newDomNode.appendChild(n);
			domNode.removeChild(domNode.getFirstChild());
		}

		org.w3c.dom.NamedNodeMap srcAttributes = ((org.w3c.dom.Element)domNode).getAttributes();
		org.w3c.dom.NamedNodeMap newAttributes = newDomNode.getAttributes();
		while (srcAttributes.getLength() > 0) {
			org.w3c.dom.Node n = srcAttributes.item(0);
			newAttributes.setNamedItem(newDomNode.getOwnerDocument().importNode(n, true));
			srcAttributes.removeNamedItem(n.getNodeName());
		}

		domNode = newDomNode;
	}

	protected static String lookupPrefix(org.w3c.dom.Node node, String URI) {
		if (node == null || URI == null || URI.equals(""))
			return null;

		if (node.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
			org.w3c.dom.NamedNodeMap attrs = node.getAttributes();
			if (attrs != null) {
				int len = attrs.getLength();
				for (int i = 0; i < len; i++) {
					org.w3c.dom.Attr attr = (org.w3c.dom.Attr)attrs.item(i);
					String name = attr.getName();
					String value = attr.getValue();
					if (value != null && value.equals(URI)) {
						if (name.startsWith("xmlns:"))
							return name.substring(6);
					}
				}
			}
			return lookupPrefix(node.getParentNode(), URI);
		} else if (node.getNodeType() == org.w3c.dom.Node.ATTRIBUTE_NODE) {
			return lookupPrefix(((org.w3c.dom.Attr)node).getOwnerElement(), URI);
		} else {
			return null;
		}
	}

	protected static String lookupDefaultNamespace(org.w3c.dom.Node node) {
		if (node == null)
			return null;

		if (node.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
			org.w3c.dom.Attr attr = ((org.w3c.dom.Element)node).getAttributeNode("xmlns");
			if (attr != null)
				return attr.getValue();
		}

		return lookupDefaultNamespace(node.getParentNode());
	}

	protected static void internalAdjustPrefix(org.w3c.dom.Node node, boolean qualified) {
		if (node == null)
			return;
		if (qualified) {
			String prefix = lookupPrefix(node, node.getNamespaceURI());
			if (prefix != null)
				node.setPrefix(prefix);
		}
		else if (node.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
			org.w3c.dom.Element element = (org.w3c.dom.Element)node;
			if (lookupDefaultNamespace(element) != null)
				element.setAttribute("xmlns", "");
		}
	}

	public abstract void adjustPrefix();

	public static org.w3c.dom.Node dereference(org.w3c.dom.Node node) {
		if (node.getNodeType() != org.w3c.dom.Node.ELEMENT_NODE)
			return node;
		
		String href = ((org.w3c.dom.Element)node).getAttribute("href");
		if (href == null || href.length()  == 0) 
			return node;
		href = href.substring(1);

		for (org.w3c.dom.Node ref = node.getOwnerDocument().getDocumentElement().getFirstChild().getNextSibling(); ref != null; ref = ref.getNextSibling())
			if (ref.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE && ((org.w3c.dom.Element)ref).getAttribute("id").equals(href))
				return ref;

		return node;
	}
}

⌨️ 快捷键说明

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