use of org.brackit.xquery.atomic.QNm in project sirix by sirixdb.
the class AttributeNodeTest method testAttributeNode.
@Test
public void testAttributeNode() throws IOException {
final byte[] value = { (byte) 17, (byte) 18 };
final NodeDelegate del = new NodeDelegate(99, 13, 0, 0, Optional.of(SirixDeweyID.newRootID()));
final NameNodeDelegate nameDel = new NameNodeDelegate(del, 13, 14, 15, 1);
final ValNodeDelegate valDel = new ValNodeDelegate(del, value, false);
final AttributeNode node = new AttributeNode(del, nameDel, valDel, new QNm("ns", "a", "p"));
// Create empty node.
check(node);
// Serialize and deserialize node.
final ByteArrayOutputStream out = new ByteArrayOutputStream();
node.getKind().serialize(new DataOutputStream(out), node, mPageReadTrx);
final ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
final AttributeNode node2 = (AttributeNode) Kind.ATTRIBUTE.deserialize(new DataInputStream(in), node.getNodeKey(), node.getDeweyID(), mPageReadTrx);
check(node2);
}
use of org.brackit.xquery.atomic.QNm in project sirix by sirixdb.
the class ElementNodeTest method testElementNode.
@Test
public void testElementNode() throws IOException {
final NodeDelegate del = new NodeDelegate(13, 14, 0, 0, Optional.of(SirixDeweyID.newRootID()));
final StructNodeDelegate strucDel = new StructNodeDelegate(del, 12l, 17l, 16l, 1l, 0);
final NameNodeDelegate nameDel = new NameNodeDelegate(del, 17, 18, 19, 1);
final ElementNode node = new ElementNode(strucDel, nameDel, new ArrayList<Long>(), HashBiMap.<Long, Long>create(), new ArrayList<Long>(), new QNm("ns", "a", "p"));
// Create empty node.
node.insertAttribute(97, 100);
node.insertAttribute(98, 101);
node.insertNamespace(99);
node.insertNamespace(100);
check(node);
// Serialize and deserialize node.
final ByteArrayOutputStream out = new ByteArrayOutputStream();
node.getKind().serialize(new DataOutputStream(out), node, mPageReadTrx);
final ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
final ElementNode node2 = (ElementNode) Kind.ELEMENT.deserialize(new DataInputStream(in), node.getNodeKey(), node.getDeweyID(), mPageReadTrx);
check(node2);
}
use of org.brackit.xquery.atomic.QNm in project sirix by sirixdb.
the class XMLShredder method insertNewContent.
/**
* Insert new content based on a StAX parser {@link XMLStreamReader}.
*
* @throws SirixException if something went wrong while inserting
*/
protected final void insertNewContent() throws SirixException {
try {
boolean firstElement = true;
int level = 0;
QName rootElement = null;
boolean endElemReached = false;
final StringBuilder sBuilder = new StringBuilder();
long insertedRootNodeKey = -1;
// Iterate over all nodes.
while (mReader.hasNext() && !endElemReached) {
final XMLEvent event = mReader.nextEvent();
switch(event.getEventType()) {
case XMLStreamConstants.START_ELEMENT:
level++;
addNewElement(event.asStartElement());
if (firstElement) {
firstElement = false;
insertedRootNodeKey = mWtx.getNodeKey();
rootElement = event.asStartElement().getName();
}
break;
case XMLStreamConstants.END_ELEMENT:
level--;
if (level == 0 && rootElement != null && rootElement.equals(event.asEndElement().getName())) {
endElemReached = true;
}
final QName name = event.asEndElement().getName();
processEndTag(new QNm(name.getNamespaceURI(), name.getPrefix(), name.getLocalPart()));
break;
case XMLStreamConstants.CHARACTERS:
if (mReader.peek().getEventType() == XMLStreamConstants.CHARACTERS) {
sBuilder.append(event.asCharacters().getData().trim());
} else {
sBuilder.append(event.asCharacters().getData().trim());
processText(sBuilder.toString());
sBuilder.setLength(0);
}
break;
case XMLStreamConstants.COMMENT:
if (mIncludeComments) {
processComment(((Comment) event).getText());
}
break;
case XMLStreamConstants.PROCESSING_INSTRUCTION:
if (mIncludePIs) {
final ProcessingInstruction pi = (ProcessingInstruction) event;
processPI(pi.getData(), pi.getTarget());
}
break;
default:
}
}
mWtx.moveTo(insertedRootNodeKey);
} catch (final XMLStreamException e) {
throw new SirixIOException(e);
}
}
use of org.brackit.xquery.atomic.QNm in project sirix by sirixdb.
the class XMLUpdateShredder method addNewElement.
/**
* Add a new element node.
*
* @param paramAdd determines wether node is added as first child or right sibling
* @param paramStartElement the current {@link StartElement}
* @throws SirixException if inserting node fails
*/
private void addNewElement(final EAdd paramAdd, final StartElement paramStartElement) throws SirixException {
assert paramStartElement != null;
final QName name = paramStartElement.getName();
final QNm qName = new QNm(name.getNamespaceURI(), name.getPrefix(), name.getLocalPart());
long key;
if (mInsert == Insert.ASRIGHTSIBLING) {
key = mWtx.insertElementAsRightSibling(qName).getNodeKey();
} else {
if (paramAdd == EAdd.ASFIRSTCHILD) {
key = mWtx.insertElementAsFirstChild(qName).getNodeKey();
} else {
key = mWtx.insertElementAsRightSibling(qName).getNodeKey();
}
}
// Parse namespaces.
for (final Iterator<?> it = paramStartElement.getNamespaces(); it.hasNext(); ) {
final Namespace namespace = (Namespace) it.next();
mWtx.insertNamespace(new QNm(namespace.getNamespaceURI(), namespace.getPrefix(), ""));
mWtx.moveTo(key);
}
// Parse attributes.
for (final Iterator<?> it = paramStartElement.getAttributes(); it.hasNext(); ) {
final Attribute attribute = (Attribute) it.next();
final QName attName = attribute.getName();
mWtx.insertAttribute(new QNm(attName.getNamespaceURI(), attName.getPrefix(), attName.getLocalPart()), attribute.getValue());
mWtx.moveTo(key);
}
}
use of org.brackit.xquery.atomic.QNm in project sirix by sirixdb.
the class SAXSerializer method emitEndElement.
@Override
protected void emitEndElement(final XdmNodeReadTrx rtx) {
final QNm qName = rtx.getName();
final String mURI = qName.getNamespaceURI();
try {
mContHandler.endPrefixMapping(qName.getPrefix());
mContHandler.endElement(mURI, qName.getLocalName(), Utils.buildName(qName));
} catch (final SAXException e) {
LOGGER.error(e.getMessage(), e);
}
}
Aggregations