public Renderer(XMLElement element) { this.topElement = element; ResolverNamespaceResolver nsResolver = new ResolverNamespaceResolver(); renderXMLElement(topElement, nsResolver, openElementBuffer, elementContentBuffer, closeElementBuffer); }
public String resolvePrefix(String uri) { return resolvePrefix(uri, true); }
if (attrNs.length() > 0 && resolvePrefix(attrNs, false) == null) { ns.put(resolvePrefix(attrNs), attrNs); pop(); if (resolvePrefix(topElm.getNamespaceURI(), false) == null) { ns.put(topElm.getNamespacePrefix(), topElm.getNamespaceURI()); push(topElm);
private void renderXMLElement(XMLElement element, ResolverNamespaceResolver nsResolver, StringBuilder openElementBuffer, StringBuilder elementContentBuffer, StringBuilder closeElementBuffer) { nsResolver.push(element); Map<String, String> nsAttrs = nsResolver.getNamespaceDeclarations(); for (Entry<String, String> nsAttr : nsAttrs.entrySet()) { openElementBuffer.append(" "); closeElementBuffer.append(">"); nsResolver.pop();
public String resolveUri(String prefix) { // check for the reserved xml namespace if (prefix.equals("xml")) { return Namespaces.XML; } else { for (int i = elements.size() - 1; i >= 0; i--) { String uri = resolveUri(elements.get(i), prefix); if (uri != null) { return uri; } } } // is the current element declared with this prefix, // if so, return the declared namespace if (!elements.isEmpty() && prefix.equals(elements.peek().getNamespacePrefix())) { // the namespace URI must not be defined for another prefix String uri = elements.peek().getNamespaceURI(); String resolvedPrefix = resolvePrefix(uri, false); if (resolvedPrefix == null || resolvedPrefix.equals(prefix)) { return uri; } } // could not resolve URI return null; }
private String resolvePrefix(String uri, boolean generatePrefix) { // check for the reserved xml namespace if (uri.equals(Namespaces.XML)) { return "xml"; } else { for (int i = elements.size() - 1; i >= 0; i--) { String prefix = resolvePrefix(elements.get(i), uri); if (prefix != null) { return prefix; } } } // is the current element in this namespace, if so, return the default prefix if (!elements.isEmpty() && uri.equals(elements.peek().getNamespaceURI())) { return elements.peek().getNamespacePrefix(); } if (generatePrefix) { // TODO replace with prefix generation return "ns1"; } else { return null; } }
private void renderElementName(StringBuilder buffer, XMLElement element, ResolverNamespaceResolver nsResolver) { // if the element has a namespace prefix, retrieves the prefix from the defining attribute if (element.getNamespacePrefix() != null && element.getNamespacePrefix().length() > 0) { buffer.append(element.getNamespacePrefix()).append(COLON); } else if (element.getNamespaceURI().length() > 0) { // element is in a namespace, but without a declared prefix, we need to resolve the prefix String prefix = nsResolver.resolvePrefix(element.getNamespaceURI()); if (prefix != null && prefix.length() > 0) { buffer.append(prefix).append(COLON); } } buffer.append(element.getName()); }
private void renderAttribute(StringBuilder buffer, Attribute attribute, ResolverNamespaceResolver nsResolver) { String qname; if (!attribute.getNamespaceUri().equals("")) { // attribute is in a namespace, resolve prefix qname = nsResolver.resolvePrefix(attribute.getNamespaceUri()) + ":" + attribute.getName(); } else { qname = attribute.getName(); } renderAttribute(buffer, qname, attribute.getValue()); }