172 lines
5.7 KiB
C++
172 lines
5.7 KiB
C++
|
#ifndef __XMLWRITER_H
|
||
|
#define __XMLWRITER_H
|
||
|
|
||
|
#include <vector>
|
||
|
#include <string>
|
||
|
|
||
|
#include <xercesc/dom/DOMElement.hpp>
|
||
|
|
||
|
#include "common/Logger.hpp"
|
||
|
|
||
|
#ifndef SWIG
|
||
|
XERCES_CPP_NAMESPACE_USE
|
||
|
#endif /* SWIG */
|
||
|
|
||
|
class XMLParser;
|
||
|
|
||
|
/**
|
||
|
* An XMLWriter provides a simple interface to build a DOM tree and serialize
|
||
|
* it to XML format. XMLWriters are namespace aware and may be configured to
|
||
|
* validate the generated XML.
|
||
|
*/
|
||
|
class XMLWriter
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
/**
|
||
|
* Get the root element of the DOM tree associated with this writer.
|
||
|
*
|
||
|
* @return The root Element of the DOM tree.
|
||
|
*/
|
||
|
virtual DOMElement* getRoot(void) const = 0;
|
||
|
virtual ~XMLWriter();
|
||
|
|
||
|
typedef std::vector<std::string> string_list;
|
||
|
|
||
|
/**
|
||
|
* Append a new child element to the specified element. The new element
|
||
|
* will inherit the namespace of the parent.
|
||
|
*
|
||
|
* @param parent The element which will be the parent element of the new
|
||
|
* element.
|
||
|
*
|
||
|
* @param name The name of the new element (tag).
|
||
|
*
|
||
|
* @return The new child element.
|
||
|
*/
|
||
|
DOMElement* appendChild(DOMElement* parent,
|
||
|
const std::string& name);
|
||
|
/**
|
||
|
* Append a new child element to the specified element. The new element
|
||
|
* will be in the namespace identified by the given URI.
|
||
|
*
|
||
|
* @param parent The element which will be the parent element of the new
|
||
|
* element.
|
||
|
*
|
||
|
* @param name The name of the new element (tag).
|
||
|
*
|
||
|
* @param uri Namespace URI for the new child element.
|
||
|
*/
|
||
|
DOMElement* appendChild(DOMElement* parent,
|
||
|
const std::string& name,
|
||
|
const std::string& uri);
|
||
|
/**
|
||
|
* Append a DOM Element with the given name and attribute to the specified
|
||
|
* parent Element. The new {@link org.w3c.dom.Element} will be in the
|
||
|
* namespace of its parent.
|
||
|
*
|
||
|
* @param parent The parent of the new Element.
|
||
|
*
|
||
|
* @param name The name of the new Element.
|
||
|
*
|
||
|
* @param attrName The name of the attribute of the new Element.
|
||
|
*
|
||
|
* @param attrValue The value of the attribute named {@code attrName}.
|
||
|
*
|
||
|
* @return The new Element.
|
||
|
*/
|
||
|
DOMElement* appendChild(DOMElement* parent,
|
||
|
const std::string& name,
|
||
|
const std::string& attrName,
|
||
|
const std::string& attrValue);
|
||
|
/**
|
||
|
* Append a DOM Element with the given name, text content value and
|
||
|
* attribute to the specified parent Element. The new {@link
|
||
|
* org.w3c.dom.Element} will be in the namespace of its parent.
|
||
|
*
|
||
|
* @param parent The parent of the new Element.
|
||
|
*
|
||
|
* @param name The name of the new Element.
|
||
|
*
|
||
|
* @param value The text content to assign to the text node child of the
|
||
|
* new Element.
|
||
|
*
|
||
|
* @param attrName The name of the attribute of the new Element.
|
||
|
*
|
||
|
* @param attrValue The value of the attribute named {@code attrName}.
|
||
|
*
|
||
|
* @return The new Element.
|
||
|
*/
|
||
|
DOMElement* appendChild(DOMElement* parent,
|
||
|
const std::string& name,
|
||
|
const std::string& value,
|
||
|
const std::string& attrName,
|
||
|
const std::string& attrValue);
|
||
|
/**
|
||
|
* Append a DOM Element with the given name and attributes to the specified
|
||
|
* parent Element. The new element is in the namespace identified the the
|
||
|
* given URI. The two arrays {@code attrNames} and {@code attrValues} must
|
||
|
* have the same length and be ordered such that the nth element of {@code
|
||
|
* attrValues} corresponds to the attribute with the name given by the nth
|
||
|
* element of {@code attrNames}.
|
||
|
*
|
||
|
* @param parent The parent of the new Element.
|
||
|
*
|
||
|
* @param name The name of the new Element.
|
||
|
*
|
||
|
* @param uri The URI of the new Element's namespace.
|
||
|
*
|
||
|
* @param attrNames The names of the attributes of the new Element.
|
||
|
*
|
||
|
* @param attrValues The values of each of the attributes {@code attrName}.
|
||
|
*
|
||
|
* @return The new Element.
|
||
|
*/
|
||
|
DOMElement* appendChild(DOMElement* parent,
|
||
|
const std::string& name,
|
||
|
const std::string& uri,
|
||
|
const std::string& value,
|
||
|
const string_list& attrNames,
|
||
|
const string_list& attrValues);
|
||
|
/**
|
||
|
* Append multiple DOM Elements to the given Element, each having a
|
||
|
* specified text content. The text content of each new element is defined
|
||
|
* by the {@code values} array. The new {@link DOMElement} will
|
||
|
* be in the namespace of its parent.
|
||
|
*
|
||
|
* @param parent The parent of the new Elements.
|
||
|
*
|
||
|
* @param name The name of the new Elements.
|
||
|
*/
|
||
|
void appendChildren(DOMElement* parent,
|
||
|
const std::string& name,
|
||
|
const string_list& values);
|
||
|
|
||
|
/**
|
||
|
* Serialize to XML format the DOM tree currently associated with this
|
||
|
* XMLWriter.
|
||
|
*/
|
||
|
std::string toXML();
|
||
|
|
||
|
/// Must be called prior to any instances are created.
|
||
|
static void init();
|
||
|
|
||
|
protected:
|
||
|
static Logger *debugLogger;
|
||
|
static Logger *userLogger;
|
||
|
|
||
|
virtual std::string version() = 0;
|
||
|
virtual std::string encoding() = 0;
|
||
|
//
|
||
|
virtual DOMElement* createElement(const std::string &uri,
|
||
|
const std::string &name) = 0;
|
||
|
/**
|
||
|
* Set the root element of the DOM tree associated with this writer.
|
||
|
*
|
||
|
* @param newRoot The DOM Element to assign as the root.
|
||
|
*/
|
||
|
virtual void setRoot(DOMElement *newRoot) = 0;
|
||
|
|
||
|
};
|
||
|
#endif // __XMLWRITER_H
|