23#include <unordered_map>
25#include <libxml/tree.h>
32#include <com/sun/star/uno/Reference.h>
33#include <com/sun/star/beans/StringPair.hpp>
34#include <com/sun/star/xml/dom/XNode.hpp>
35#include <com/sun/star/xml/dom/XAttr.hpp>
36#include <com/sun/star/xml/dom/XElement.hpp>
37#include <com/sun/star/xml/dom/XDOMImplementation.hpp>
38#include <com/sun/star/xml/dom/events/XDocumentEvent.hpp>
39#include <com/sun/star/xml/dom/events/XEvent.hpp>
40#include <com/sun/star/xml/sax/XSAXSerializable.hpp>
41#include <com/sun/star/xml/sax/XFastSAXSerializable.hpp>
42#include <com/sun/star/xml/sax/XDocumentHandler.hpp>
43#include <com/sun/star/xml/sax/XFastDocumentHandler.hpp>
44#include <com/sun/star/io/XActiveDataSource.hpp>
45#include <com/sun/star/io/XActiveDataControl.hpp>
46#include <com/sun/star/io/XOutputStream.hpp>
47#include <com/sun/star/io/XStreamListener.hpp>
60 typedef ::cppu::ImplInheritanceHelper<
61 CNode, css::xml::dom::XDocument, css::xml::dom::events::XDocumentEvent,
62 css::io::XActiveDataControl, css::io::XActiveDataSource,
63 css::xml::sax::XSAXSerializable, css::xml::sax::XFastSAXSerializable>
83 typedef std::unordered_map< xmlNodePtr,
84 ::std::pair< css::uno::WeakReference<css::xml::dom::XNode>, CNode* > >
nodemap_t;
89 explicit CDocument(xmlDocPtr
const pDocPtr);
94 static ::rtl::Reference<CDocument>
107 xmlNodePtr
const pNode,
bool const bCreate =
true);
109 void RemoveCNode(xmlNodePtr
const pNode, CNode
const*
const pCNode);
113 virtual void saxify(
const css::uno::Reference< css::xml::sax::XDocumentHandler >& i_xHandler)
override;
118 css::xml::dom::NodeType
const* pReplacedNodeType)
override;
123 virtual css::uno::Reference< css::xml::dom::XAttr > SAL_CALL
createAttribute(
const OUString& name)
override;
128 virtual css::uno::Reference< css::xml::dom::XAttr > SAL_CALL
createAttributeNS(
const OUString& namespaceURI,
const OUString& qualifiedName)
override;
133 virtual css::uno::Reference< css::xml::dom::XCDATASection > SAL_CALL
createCDATASection(
const OUString& data)
override;
138 virtual css::uno::Reference< css::xml::dom::XComment > SAL_CALL
createComment(
const OUString& data)
override;
143 virtual css::uno::Reference< css::xml::dom::XDocumentFragment > SAL_CALL
createDocumentFragment()
override;
148 virtual css::uno::Reference< css::xml::dom::XElement > SAL_CALL
createElement(
const OUString& tagName)
override;
153 virtual css::uno::Reference< css::xml::dom::XElement > SAL_CALL
createElementNS(
const OUString& namespaceURI,
const OUString& qualifiedName)
override;
158 virtual css::uno::Reference< css::xml::dom::XEntityReference > SAL_CALL
createEntityReference(
const OUString& name)
override;
165 const OUString& target,
const OUString& data)
override;
170 virtual css::uno::Reference< css::xml::dom::XText > SAL_CALL
createTextNode(
const OUString& data)
override;
176 virtual css::uno::Reference< css::xml::dom::XDocumentType > SAL_CALL
getDoctype()
override;
182 virtual css::uno::Reference< css::xml::dom::XElement > SAL_CALL
getDocumentElement()
override;
187 virtual css::uno::Reference< css::xml::dom::XElement > SAL_CALL
getElementById(
const OUString& elementId)
override;
194 virtual css::uno::Reference< css::xml::dom::XNodeList > SAL_CALL
getElementsByTagName(
const OUString& tagname)
override;
201 virtual css::uno::Reference< css::xml::dom::XNodeList > SAL_CALL
getElementsByTagNameNS(
const OUString& namespaceURI,
const OUString& localName)
override;
206 virtual css::uno::Reference< css::xml::dom::XDOMImplementation > SAL_CALL
getImplementation()
override;
211 virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL
importNode(
const css::uno::Reference< css::xml::dom::XNode >& importedNode,
sal_Bool deep)
override;
214 virtual css::uno::Reference< css::xml::dom::events::XEvent > SAL_CALL
createEvent(
const OUString& eventType)
override;
218 virtual void SAL_CALL
addListener(
const css::uno::Reference< css::io::XStreamListener >& aListener )
override;
219 virtual void SAL_CALL
removeListener(
const css::uno::Reference< css::io::XStreamListener >& aListener )
override;
220 virtual void SAL_CALL
start()
override;
221 virtual void SAL_CALL
terminate()
override;
225 virtual void SAL_CALL
setOutputStream(
const css::uno::Reference< css::io::XOutputStream >& aStream )
override;
226 virtual css::uno::Reference< css::io::XOutputStream > SAL_CALL
getOutputStream()
override;
232 virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL
cloneNode(
sal_Bool deep)
override;
234 virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL
appendChild(
const css::uno::Reference< css::xml::dom::XNode >& newChild)
override
236 return CNode::appendChild(newChild);
238 virtual css::uno::Reference< css::xml::dom::XNamedNodeMap > SAL_CALL
getAttributes()
override
240 return CNode::getAttributes();
242 virtual css::uno::Reference< css::xml::dom::XNodeList > SAL_CALL
getChildNodes()
override
244 return CNode::getChildNodes();
246 virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL
getFirstChild()
override
248 return CNode::getFirstChild();
250 virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL
getLastChild()
override
252 return CNode::getLastChild();
256 return CNode::getLocalName();
260 return CNode::getNamespaceURI();
262 virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL
getNextSibling()
override
264 return CNode::getNextSibling();
268 return CNode::getNodeType();
270 virtual css::uno::Reference< css::xml::dom::XDocument > SAL_CALL
getOwnerDocument()
override
272 return CNode::getOwnerDocument();
274 virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL
getParentNode()
override
276 return CNode::getParentNode();
280 return CNode::getPrefix();
284 return CNode::getPreviousSibling();
288 return CNode::hasAttributes();
292 return CNode::hasChildNodes();
294 virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL
insertBefore(
295 const css::uno::Reference< css::xml::dom::XNode >& newChild,
const css::uno::Reference< css::xml::dom::XNode >& refChild)
override
297 return CNode::insertBefore(newChild, refChild);
301 return CNode::isSupported(feature, ver);
307 virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL
removeChild(
const css::uno::Reference< css::xml::dom::XNode >& oldChild)
override
309 return CNode::removeChild(oldChild);
311 virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL
replaceChild(
312 const css::uno::Reference< css::xml::dom::XNode >& newChild,
const css::uno::Reference< css::xml::dom::XNode >& oldChild)
override
314 return CNode::replaceChild(newChild, oldChild);
318 return CNode::setNodeValue(nodeValue);
320 virtual void SAL_CALL
setPrefix(
const OUString& prefix)
override
322 return CNode::setPrefix(
prefix);
327 const css::uno::Reference< css::xml::sax::XDocumentHandler >& i_xHandler,
328 const css::uno::Sequence< css::beans::StringPair >& i_rNamespaces)
override;
331 virtual void SAL_CALL
fastSerialize(
const css::uno::Reference< css::xml::sax::XFastDocumentHandler >& handler,
332 const css::uno::Reference< css::xml::sax::XFastTokenHandler >& tokenHandler,
333 const css::uno::Sequence< css::beans::StringPair >& i_rNamespaces,
334 const css::uno::Sequence< css::beans::Pair< OUString, sal_Int32 > >&
namespaces )
override;
xmlDocPtr const m_aDocPtr
the libxml document: freed in destructor => all UNO wrapper objects must keep the CDocument alive
::rtl::Reference< CNode > GetCNode(xmlNodePtr const pNode, bool const bCreate=true)
get UNO wrapper instance for a libxml node
virtual void SAL_CALL serialize(const css::uno::Reference< css::xml::sax::XDocumentHandler > &i_xHandler, const css::uno::Sequence< css::beans::StringPair > &i_rNamespaces) override
virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL getParentNode() override
virtual css::uno::Reference< css::xml::dom::XCDATASection > SAL_CALL createCDATASection(const OUString &data) override
Creates a CDATASection node whose value is the specified string.
virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL getLastChild() override
virtual void fastSaxify(Context &rContext) override
virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL getPreviousSibling() override
::osl::Mutex & GetMutex()
virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL replaceChild(const css::uno::Reference< css::xml::dom::XNode > &newChild, const css::uno::Reference< css::xml::dom::XNode > &oldChild) override
virtual void SAL_CALL setPrefix(const OUString &prefix) override
virtual OUString SAL_CALL getLocalName() override
o3tl::sorted_vector< css::uno::Reference< css::io::XStreamListener > > listenerlist_t
::std::unique_ptr< events::CEventDispatcher > const m_pEventDispatcher
virtual css::uno::Reference< css::xml::dom::XNodeList > SAL_CALL getElementsByTagNameNS(const OUString &namespaceURI, const OUString &localName) override
Returns a NodeList of all the Elements with a given local name and namespace URI in the order in whic...
virtual void SAL_CALL setOutputStream(const css::uno::Reference< css::io::XOutputStream > &aStream) override
virtual void SAL_CALL terminate() override
virtual css::uno::Reference< css::xml::dom::XAttr > SAL_CALL createAttributeNS(const OUString &namespaceURI, const OUString &qualifiedName) override
Creates an attribute of the given qualified name and namespace URI.
virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL appendChild(const css::uno::Reference< css::xml::dom::XNode > &newChild) override
virtual bool IsChildTypeAllowed(css::xml::dom::NodeType const nodeType, css::xml::dom::NodeType const *pReplacedNodeType) override
virtual css::uno::Reference< css::xml::dom::XEntityReference > SAL_CALL createEntityReference(const OUString &name) override
Creates an EntityReference object.
virtual CDocument & GetOwnerDocument() override
virtual ~CDocument() override
virtual void SAL_CALL normalize() override
virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL insertBefore(const css::uno::Reference< css::xml::dom::XNode > &newChild, const css::uno::Reference< css::xml::dom::XNode > &refChild) override
virtual void SAL_CALL removeListener(const css::uno::Reference< css::io::XStreamListener > &aListener) override
virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL importNode(const css::uno::Reference< css::xml::dom::XNode > &importedNode, sal_Bool deep) override
Imports a node from another document to this document.
virtual sal_Bool SAL_CALL hasChildNodes() override
virtual void SAL_CALL fastSerialize(const css::uno::Reference< css::xml::sax::XFastDocumentHandler > &handler, const css::uno::Reference< css::xml::sax::XFastTokenHandler > &tokenHandler, const css::uno::Sequence< css::beans::StringPair > &i_rNamespaces, const css::uno::Sequence< css::beans::Pair< OUString, sal_Int32 > > &namespaces) override
virtual css::uno::Reference< css::xml::dom::XText > SAL_CALL createTextNode(const OUString &data) override
Creates a Text node given the specified string.
listenerlist_t m_streamListeners
virtual css::uno::Reference< css::xml::dom::XNodeList > SAL_CALL getElementsByTagName(const OUString &tagname) override
Returns a NodeList of all the Elements with a given tag name in the order in which they are encounter...
virtual css::uno::Reference< css::xml::dom::XAttr > SAL_CALL createAttribute(const OUString &name) override
Creates an Attr of the given name.
virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL getNextSibling() override
virtual sal_Bool SAL_CALL hasAttributes() override
::osl::Mutex m_Mutex
this Mutex is used for synchronization of all UNO wrapper objects that belong to this document
virtual css::uno::Reference< css::xml::dom::XElement > SAL_CALL createElementNS(const OUString &namespaceURI, const OUString &qualifiedName) override
Creates an element of the given qualified name and namespace URI.
virtual OUString SAL_CALL getNodeValue() override
virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL cloneNode(sal_Bool deep) override
void RemoveCNode(xmlNodePtr const pNode, CNode const *const pCNode)
remove a UNO wrapper instance
virtual css::uno::Reference< css::xml::dom::XElement > SAL_CALL getElementById(const OUString &elementId) override
Returns the Element whose ID is given by elementId.
virtual css::uno::Reference< css::xml::dom::events::XEvent > SAL_CALL createEvent(const OUString &eventType) override
virtual css::uno::Reference< css::xml::dom::XElement > SAL_CALL getDocumentElement() override
This is a convenience attribute that allows direct access to the child node that is the root element ...
virtual css::uno::Reference< css::xml::dom::XDocumentType > SAL_CALL getDoctype() override
The Document Type Declaration (see DocumentType) associated with this document.
virtual void SAL_CALL setNodeValue(const OUString &nodeValue) override
::rtl::Reference< CElement > GetDocumentElement()
virtual css::uno::Reference< css::xml::dom::XDocument > SAL_CALL getOwnerDocument() override
virtual void SAL_CALL addListener(const css::uno::Reference< css::io::XStreamListener > &aListener) override
virtual OUString SAL_CALL getPrefix() override
CDocument(xmlDocPtr const pDocPtr)
virtual OUString SAL_CALL getNamespaceURI() override
virtual css::uno::Reference< css::io::XOutputStream > SAL_CALL getOutputStream() override
virtual css::uno::Reference< css::xml::dom::XProcessingInstruction > SAL_CALL createProcessingInstruction(const OUString &target, const OUString &data) override
Creates a ProcessingInstruction node given the specified name and data strings.
css::uno::Reference< css::io::XOutputStream > m_rOutputStream
virtual css::uno::Reference< css::xml::dom::XComment > SAL_CALL createComment(const OUString &data) override
Creates a Comment node given the specified string.
virtual OUString SAL_CALL getNodeName() override
std::unordered_map< xmlNodePtr, ::std::pair< css::uno::WeakReference< css::xml::dom::XNode >, CNode * > > nodemap_t
virtual css::xml::dom::NodeType SAL_CALL getNodeType() override
virtual css::uno::Reference< css::xml::dom::XNodeList > SAL_CALL getChildNodes() override
virtual css::uno::Reference< css::xml::dom::XElement > SAL_CALL createElement(const OUString &tagName) override
Creates an element of the type specified.
virtual sal_Bool SAL_CALL isSupported(const OUString &feature, const OUString &ver) override
events::CEventDispatcher & GetEventDispatcher()
virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL removeChild(const css::uno::Reference< css::xml::dom::XNode > &oldChild) override
virtual css::uno::Reference< css::xml::dom::XDocumentFragment > SAL_CALL createDocumentFragment() override
Creates an empty DocumentFragment object.
static ::rtl::Reference< CDocument > CreateCDocument(xmlDocPtr const pDoc)
factory: only way to create instance!
virtual void SAL_CALL start() override
virtual void saxify(const css::uno::Reference< css::xml::sax::XDocumentHandler > &i_xHandler) override
virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL getFirstChild() override
virtual css::uno::Reference< css::xml::dom::XNamedNodeMap > SAL_CALL getAttributes() override
virtual css::uno::Reference< css::xml::dom::XDOMImplementation > SAL_CALL getImplementation() override
The DOMImplementation object that handles this document.
::cppu::ImplInheritanceHelper< CNode, css::xml::dom::XDocument, css::xml::dom::events::XDocumentEvent, css::io::XActiveDataControl, css::io::XActiveDataSource, css::xml::sax::XSAXSerializable, css::xml::sax::XFastSAXSerializable > CDocument_Base