com.thoughtworks.xstream.io.xml.DomWriter Maven / Gradle / Ivy
/*
* Copyright (C) 2004, 2005, 2006 Joe Walnes.
* Copyright (C) 2006, 2007 XStream Committers.
* All rights reserved.
*
* The software in this package is published under the terms of the BSD
* style license a copy of which has been included with this distribution in
* the LICENSE.txt file.
*
* Created on 02. September 2004 by Joe Walnes
*/
package com.thoughtworks.xstream.io.xml;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/**
* @author Michael Kopp
*/
public class DomWriter extends AbstractDocumentWriter {
private final Document document;
private boolean hasRootElement;
public DomWriter(final Document document) {
this(document, new XmlFriendlyReplacer());
}
public DomWriter(final Element rootElement) {
this(rootElement, new XmlFriendlyReplacer());
}
/**
* @since 1.2
*/
public DomWriter(final Document document, final XmlFriendlyReplacer replacer) {
this(document.getDocumentElement(), document, replacer);
}
/**
* @since 1.2.1
*/
public DomWriter(final Element element, final Document document, final XmlFriendlyReplacer replacer) {
super(element, replacer);
this.document = document;
hasRootElement = document.getDocumentElement() != null;
}
/**
* @since 1.2
*/
public DomWriter(final Element rootElement, final XmlFriendlyReplacer replacer) {
this(rootElement.getOwnerDocument(), replacer);
}
protected Object createNode(final String name) {
final Element child = document.createElement(escapeXmlName(name));
final Element top = top();
if (top != null) {
top().appendChild(child);
} else if (!hasRootElement) {
document.appendChild(child);
hasRootElement = true;
}
return child;
}
public void addAttribute(final String name, final String value) {
top().setAttribute(escapeXmlName(name), value);
}
public void setValue(final String text) {
top().appendChild(document.createTextNode(text));
}
private Element top() {
return (Element)getCurrent();
}
}