📄 defaultelement.java
字号:
/*
* Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
*
* This software is open source.
* See the bottom of this file for the licence.
*/
package org.dom4j.tree;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Branch;
import org.dom4j.Document;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import org.dom4j.IllegalAddException;
import org.dom4j.Namespace;
import org.dom4j.Node;
import org.dom4j.ProcessingInstruction;
import org.dom4j.QName;
/**
* <p>
* <code>DefaultElement</code> is the default DOM4J default implementation of
* an XML element.
* </p>
*
* @author <a href="mailto:jstrachan@apache.org">James Strachan </a>
* @version $Revision: 1.59 $
*/
public class DefaultElement extends AbstractElement {
/** The <code>DocumentFactory</code> instance used by default */
private static final transient DocumentFactory DOCUMENT_FACTORY =
DocumentFactory.getInstance();
/** The <code>QName</code> for this element */
private QName qname;
/**
* Stores the parent branch of this node which is either a Document if this
* element is the root element in a document, or another Element if it is a
* child of the root document, or null if it has not been added to a
* document yet.
*/
private Branch parentBranch;
/**
* Stores null for no content, a Node for a single content node or a List
* for multiple content nodes. The List will be lazily constructed when
* required.
*/
private Object content;
/** Lazily constructes list of attributes */
private Object attributes;
public DefaultElement(String name) {
this.qname = DOCUMENT_FACTORY.createQName(name);
}
public DefaultElement(QName qname) {
this.qname = qname;
}
public DefaultElement(QName qname, int attributeCount) {
this.qname = qname;
if (attributeCount > 1) {
this.attributes = new ArrayList(attributeCount);
}
}
public DefaultElement(String name, Namespace namespace) {
this.qname = DOCUMENT_FACTORY.createQName(name, namespace);
}
public Element getParent() {
Element result = null;
if (parentBranch instanceof Element) {
result = (Element) parentBranch;
}
return result;
}
public void setParent(Element parent) {
if (parentBranch instanceof Element || (parent != null)) {
parentBranch = parent;
}
}
public Document getDocument() {
if (parentBranch instanceof Document) {
return (Document) parentBranch;
} else if (parentBranch instanceof Element) {
Element parent = (Element) parentBranch;
return parent.getDocument();
}
return null;
}
public void setDocument(Document document) {
if (parentBranch instanceof Document || (document != null)) {
parentBranch = document;
}
}
public boolean supportsParent() {
return true;
}
public QName getQName() {
return qname;
}
public void setQName(QName name) {
this.qname = name;
}
public String getText() {
final Object contentShadow = content;
if (contentShadow instanceof List) {
return super.getText();
} else {
if (contentShadow != null) {
return getContentAsText(contentShadow);
} else {
return "";
}
}
}
public String getStringValue() {
final Object contentShadow = content;
if (contentShadow instanceof List) {
List list = (List) contentShadow;
int size = list.size();
if (size > 0) {
if (size == 1) {
// optimised to avoid StringBuffer creation
return getContentAsStringValue(list.get(0));
} else {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < size; i++) {
Object node = list.get(i);
String string = getContentAsStringValue(node);
if (string.length() > 0) {
if (USE_STRINGVALUE_SEPARATOR) {
if (buffer.length() > 0) {
buffer.append(' ');
}
}
buffer.append(string);
}
}
return buffer.toString();
}
}
} else {
if (contentShadow != null) {
return getContentAsStringValue(contentShadow);
}
}
return "";
}
public Object clone() {
DefaultElement answer = (DefaultElement) super.clone();
if (answer != this) {
answer.content = null;
answer.attributes = null;
answer.appendAttributes(this);
answer.appendContent(this);
}
return answer;
}
public Namespace getNamespaceForPrefix(String prefix) {
if (prefix == null) {
prefix = "";
}
if (prefix.equals(getNamespacePrefix())) {
return getNamespace();
} else if (prefix.equals("xml")) {
return Namespace.XML_NAMESPACE;
} else {
final Object contentShadow = content;
if (contentShadow instanceof List) {
List list = (List) contentShadow;
int size = list.size();
for (int i = 0; i < size; i++) {
Object object = list.get(i);
if (object instanceof Namespace) {
Namespace namespace = (Namespace) object;
if (prefix.equals(namespace.getPrefix())) {
return namespace;
}
}
}
} else if (contentShadow instanceof Namespace) {
Namespace namespace = (Namespace) contentShadow;
if (prefix.equals(namespace.getPrefix())) {
return namespace;
}
}
}
Element parent = getParent();
if (parent != null) {
Namespace answer = parent.getNamespaceForPrefix(prefix);
if (answer != null) {
return answer;
}
}
if ((prefix == null) || (prefix.length() <= 0)) {
return Namespace.NO_NAMESPACE;
}
return null;
}
public Namespace getNamespaceForURI(String uri) {
if ((uri == null) || (uri.length() <= 0)) {
return Namespace.NO_NAMESPACE;
} else if (uri.equals(getNamespaceURI())) {
return getNamespace();
} else {
final Object contentShadow = content;
if (contentShadow instanceof List) {
List list = (List) contentShadow;
int size = list.size();
for (int i = 0; i < size; i++) {
Object object = list.get(i);
if (object instanceof Namespace) {
Namespace namespace = (Namespace) object;
if (uri.equals(namespace.getURI())) {
return namespace;
}
}
}
} else if (contentShadow instanceof Namespace) {
Namespace namespace = (Namespace) contentShadow;
if (uri.equals(namespace.getURI())) {
return namespace;
}
}
Element parent = getParent();
if (parent != null) {
return parent.getNamespaceForURI(uri);
}
return null;
}
}
public List declaredNamespaces() {
BackedList answer = createResultList();
// if (getNamespaceURI().length() > 0) {
//
// answer.addLocal(getNamespace());
//
// }
final Object contentShadow = content;
if (contentShadow instanceof List) {
List list = (List) contentShadow;
int size = list.size();
for (int i = 0; i < size; i++) {
Object object = list.get(i);
if (object instanceof Namespace) {
answer.addLocal(object);
}
}
} else {
if (contentShadow instanceof Namespace) {
answer.addLocal(contentShadow);
}
}
return answer;
}
public List additionalNamespaces() {
final Object contentShadow = content;
if (contentShadow instanceof List) {
List list = (List) contentShadow;
int size = list.size();
BackedList answer = createResultList();
for (int i = 0; i < size; i++) {
Object object = list.get(i);
if (object instanceof Namespace) {
Namespace namespace = (Namespace) object;
if (!namespace.equals(getNamespace())) {
answer.addLocal(namespace);
}
}
}
return answer;
} else {
if (contentShadow instanceof Namespace) {
Namespace namespace = (Namespace) contentShadow;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -