Ejemplo n.º 1
0
  @Override
  protected int nextChild() {
    ElementFrame<Node, Node> frame = getCurrentFrame();
    if (frame.currentChild == null) {
      content = getCurrentNode().getFirstChild();
    } else {
      content = frame.currentChild.getNextSibling();
    }

    frame.currentChild = content;
    switch (content.getNodeType()) {
      case Node.ELEMENT_NODE:
        return START_ELEMENT;
      case Node.TEXT_NODE:
        return CHARACTERS;
      case Node.COMMENT_NODE:
        return COMMENT;
      case Node.CDATA_SECTION_NODE:
        return CDATA;
      case Node.ENTITY_REFERENCE_NODE:
        return ENTITY_REFERENCE;
      default:
        throw new IllegalStateException("Found type: " + content.getClass().getName());
    }
  }
Ejemplo n.º 2
0
  @Override
  public String getElementText() throws XMLStreamException {
    String result = DOMUtils.getRawContent(content);

    ElementFrame<Node, Node> frame = getCurrentFrame();
    frame.ended = true;
    currentEvent = END_ELEMENT;
    endElement();

    // we should not return null according to the StAx API javadoc
    return result != null ? result : "";
  }
Ejemplo n.º 3
0
  /** Find name spaces declaration in atrributes and move them to separate collection. */
  @Override
  protected final void newFrame(ElementFrame<Node, Node> frame) {
    Node element = getCurrentNode();
    frame.uris = new ArrayList<String>();
    frame.prefixes = new ArrayList<String>();
    frame.attributes = new ArrayList<Object>();

    if (context == null) {
      context = new W3CNamespaceContext();
    }
    if (element instanceof Element) {
      context.setElement((Element) element);
    }

    NamedNodeMap nodes = element.getAttributes();

    String ePrefix = element.getPrefix();
    if (ePrefix == null) {
      ePrefix = "";
    }

    if (nodes != null) {
      for (int i = 0; i < nodes.getLength(); i++) {
        Node node = nodes.item(i);
        String prefix = node.getPrefix();
        String localName = node.getLocalName();
        String value = node.getNodeValue();
        String name = node.getNodeName();

        if (prefix == null) {
          prefix = "";
        }

        if (name != null && "xmlns".equals(name)) {
          frame.uris.add(value);
          frame.prefixes.add("");
        } else if (prefix.length() > 0 && "xmlns".equals(prefix)) {
          frame.uris.add(value);
          frame.prefixes.add(localName);
        } else if (name.startsWith("xmlns:")) {
          prefix = name.substring(6);
          frame.uris.add(value);
          frame.prefixes.add(prefix);
        } else {
          frame.attributes.add(node);
        }
      }
    }
  }
Ejemplo n.º 4
0
  @Override
  public String getNamespaceURI(String prefix) {
    ElementFrame<Node, Node> frame = getCurrentFrame();

    while (null != frame) {
      int index = frame.prefixes.indexOf(prefix);
      if (index != -1) {
        return frame.uris.get(index);
      }

      if (frame.parent == null && frame.getElement() instanceof Element) {
        return ((Element) frame.getElement()).lookupNamespaceURI(prefix);
      }
      frame = frame.parent;
    }

    return null;
  }