xmlstreamreaderfromdom.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 739 行 · 第 1/2 页
JAVA
739 行
if (parent == null) {
parent = (Element)nextCursorStack.peek();
}
element = (Element)cursor.getParentNode();
}
if (element == cacheNCIKey) {
return cacheNCI;
}
cacheNCIKey = element;
cacheNCI = new NamespaceContextFromDOM(element);
return cacheNCI;
}
/* (non-Javadoc)
* @see javax.xml.stream.XMLStreamReader#getEventType()
*/
public int getEventType() {
return event;
}
/* (non-Javadoc)
* @see javax.xml.stream.XMLStreamReader#getText()
*/
public String getText() {
if (event == XMLStreamReader.CHARACTERS ||
event == XMLStreamReader.CDATA ||
event == XMLStreamReader.COMMENT) {
return ((CharacterData)cursor).getData();
}
throw new IllegalStateException(Messages.getMessage("XMLSRErr4", "getText()"));
}
/* (non-Javadoc)
* @see javax.xml.stream.XMLStreamReader#getTextCharacters()
*/
public char[] getTextCharacters() {
return getText().toCharArray();
}
/* (non-Javadoc)
* @see javax.xml.stream.XMLStreamReader#getTextCharacters(int, char[], int, int)
*/
public int getTextCharacters(int sourceStart, char[] target, int targetStart, int length)
throws XMLStreamException {
String value = getText();
// Calculate the sourceEnd index
int sourceEnd = sourceStart + length;
if (value.length() < sourceEnd) {
sourceEnd = value.length();
}
value.getChars(sourceStart, sourceEnd, target, targetStart);
return sourceEnd - sourceStart;
}
/* (non-Javadoc)
* @see javax.xml.stream.XMLStreamReader#getTextStart()
*/
public int getTextStart() {
return 0;
}
/* (non-Javadoc)
* @see javax.xml.stream.XMLStreamReader#getTextLength()
*/
public int getTextLength() {
return getText().length();
}
/* (non-Javadoc)
* @see javax.xml.stream.XMLStreamReader#getEncoding()
*/
public String getEncoding() {
return null;
}
/* (non-Javadoc)
* @see javax.xml.stream.XMLStreamReader#hasText()
*/
public boolean hasText() {
return (event == XMLStreamReader.CHARACTERS ||
event == XMLStreamReader.CDATA ||
event == XMLStreamReader.COMMENT);
}
/* (non-Javadoc)
* @see javax.xml.stream.XMLStreamReader#getLocation()
*/
public Location getLocation() {
return dummyLocation;
}
/* (non-Javadoc)
* @see javax.xml.stream.XMLStreamReader#getName()
*/
public QName getName() {
if (cursor instanceof Element) {
return new QName(cursor.getNamespaceURI(), cursor.getLocalName());
}
throw new IllegalStateException(Messages.getMessage("XMLSRErr4", "getName()"));
}
/* (non-Javadoc)
* @see javax.xml.stream.XMLStreamReader#getLocalName()
*/
public String getLocalName() {
if (cursor instanceof Element) {
return cursor.getLocalName();
}
throw new IllegalStateException(Messages.getMessage("XMLSRErr4", "getLocalName()"));
}
/* (non-Javadoc)
* @see javax.xml.stream.XMLStreamReader#hasName()
*/
public boolean hasName() {
return (isStartElement() || isEndElement());
}
/* (non-Javadoc)
* @see javax.xml.stream.XMLStreamReader#getNamespaceURI()
*/
public String getNamespaceURI() {
if (cursor instanceof Element) {
return cursor.getNamespaceURI();
} else {
return null;
}
}
/* (non-Javadoc)
* @see javax.xml.stream.XMLStreamReader#getPrefix()
*/
public String getPrefix() {
if (cursor instanceof Element) {
return cursor.getPrefix();
} else {
return null;
}
}
/* (non-Javadoc)
* @see javax.xml.stream.XMLStreamReader#getVersion()
*/
public String getVersion() {
return null;
}
/* (non-Javadoc)
* @see javax.xml.stream.XMLStreamReader#isStandalone()
*/
public boolean isStandalone() {
return false;
}
/* (non-Javadoc)
* @see javax.xml.stream.XMLStreamReader#standaloneSet()
*/
public boolean standaloneSet() {
return false;
}
/* (non-Javadoc)
* @see javax.xml.stream.XMLStreamReader#getCharacterEncodingScheme()
*/
public String getCharacterEncodingScheme() {
return null;
}
/* (non-Javadoc)
* @see javax.xml.stream.XMLStreamReader#getPITarget()
*/
public String getPITarget() {
return null;
}
/* (non-Javadoc)
* @see javax.xml.stream.XMLStreamReader#getPIData()
*/
public String getPIData() {
return null;
}
/** Sets nextCursor and nextEvent from using the current cursor and event. */
private void getNext() throws IllegalStateException {
switch (event) {
case XMLStreamReader.START_DOCUMENT: {
nextCursor = cursor;
nextEvent = XMLStreamReader.START_ELEMENT;
break;
}
case XMLStreamReader.START_ELEMENT: {
if (cursor.getFirstChild() != null) {
nextCursorStack.push(nextCursor);
nextCursor = cursor.getFirstChild();
nextEvent = startEvent(nextCursor);
} else {
nextEvent = XMLStreamReader.END_ELEMENT;
}
break;
}
case XMLStreamReader.ATTRIBUTE: {
throw new IllegalStateException(Messages.getMessage("XMLSRErr5", "ATTRIBUTE"));
}
case XMLStreamReader.NAMESPACE: {
throw new IllegalStateException(Messages.getMessage("XMLSRErr5", "NAMESPACE"));
}
case XMLStreamReader.END_ELEMENT:
case XMLStreamReader.CHARACTERS:
case XMLStreamReader.CDATA:
case XMLStreamReader.COMMENT:
case XMLStreamReader.SPACE:
case XMLStreamReader.PROCESSING_INSTRUCTION:
case XMLStreamReader.ENTITY_REFERENCE:
case XMLStreamReader.DTD: {
if (cursor.getNextSibling() != null) {
nextCursor = cursor.getNextSibling();
nextEvent = startEvent(nextCursor);
} else if (cursor == root) {
nextEvent = XMLStreamReader.END_DOCUMENT;
} else {
// The following does not work with
// Axiom Text nodes
// nextCursor = cursor.getParentNode();
// This is the reason why a stack is used.
nextCursor = nextCursorStack.pop();
nextEvent = XMLStreamReader.END_ELEMENT;
}
break;
}
case XMLStreamReader.END_DOCUMENT: {
nextCursor = null;
nextEvent = -1;
}
default:
throw new IllegalStateException(
Messages.getMessage("XMLSRErr5", String.valueOf(event)));
}
}
/**
* Returns the start event for this particular node
*
* @param node
* @return
*/
private int startEvent(Node node) {
if (node instanceof ProcessingInstruction) {
return XMLStreamReader.PROCESSING_INSTRUCTION;
}
if (node instanceof CDATASection) {
return XMLStreamReader.CDATA;
}
if (node instanceof Comment) {
return XMLStreamReader.COMMENT;
}
if (node instanceof Text) {
if (node instanceof javax.xml.soap.Text) {
javax.xml.soap.Text soapText = (javax.xml.soap.Text)node;
if (soapText.isComment()) {
return XMLStreamReader.COMMENT;
} else {
return XMLStreamReader.CHARACTERS;
}
}
return XMLStreamReader.CHARACTERS;
}
if (node instanceof Element) {
return XMLStreamReader.START_ELEMENT;
}
if (node instanceof Attr) {
return XMLStreamReader.ATTRIBUTE;
}
if (node instanceof Document) {
return XMLStreamReader.START_DOCUMENT;
}
if (node instanceof EntityReference) {
return XMLStreamReader.ENTITY_REFERENCE;
}
if (node instanceof DocumentType) {
return XMLStreamReader.DTD;
}
return -1;
}
// This is the definition of a dummy Location
private DummyLocation dummyLocation = new DummyLocation();
private class DummyLocation implements Location {
public int getLineNumber() {
return -1;
}
public int getColumnNumber() {
return 0;
}
public int getCharacterOffset() {
return 0;
}
public String getPublicId() {
return null;
}
public String getSystemId() {
return null;
}
}
public List getNamespaceDeclarations() {
Element element = null;
if (cursor instanceof Element) {
element = (Element)cursor;
} else {
return new ArrayList();
}
if (element == cacheNDKey) {
return cacheND;
}
cacheNDKey = element;
cacheND = new ArrayList();
NamedNodeMap attrs = element.getAttributes();
if (attrs != null) {
for (int i = 0; i < attrs.getLength(); i++) {
Attr attr = (Attr)attrs.item(i);
String name = attr.getNodeName();
if (name.startsWith("xmlns")) {
String prefix = "";
if (name.startsWith("xmlns:")) {
prefix = name.substring(6);
}
NamespaceDeclare nd = new NamespaceDeclare(prefix, attr.getNodeValue());
cacheND.add(nd);
}
}
}
return cacheND;
}
class NamespaceDeclare {
String prefix;
String uri;
NamespaceDeclare(String prefix, String uri) {
this.prefix = prefix;
this.uri = uri;
}
String getPrefix() {
return prefix;
}
String getURI() {
return uri;
}
}
Node getNode() {
return cursor;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?