2023-02-08 11:04:11 +00:00
|
|
|
//
|
|
|
|
// AbstractNode.h
|
|
|
|
//
|
|
|
|
// Library: XML
|
|
|
|
// Package: DOM
|
|
|
|
// Module: DOM
|
|
|
|
//
|
|
|
|
// Definition of the AbstractNode class.
|
|
|
|
//
|
|
|
|
// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
|
|
|
|
// and Contributors.
|
|
|
|
//
|
|
|
|
// SPDX-License-Identifier: BSL-1.0
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef DOM_AbstractNode_INCLUDED
|
|
|
|
#define DOM_AbstractNode_INCLUDED
|
|
|
|
|
|
|
|
|
|
|
|
#include "Poco/DOM/MutationEvent.h"
|
2023-02-13 09:00:23 +00:00
|
|
|
#include "Poco/DOM/Node.h"
|
|
|
|
#include "Poco/XML/XML.h"
|
2023-02-08 11:04:11 +00:00
|
|
|
#include "Poco/XML/XMLString.h"
|
|
|
|
|
|
|
|
|
2023-02-13 09:00:23 +00:00
|
|
|
namespace Poco
|
|
|
|
{
|
|
|
|
namespace XML
|
|
|
|
{
|
2023-02-08 11:04:11 +00:00
|
|
|
|
|
|
|
|
2023-02-13 09:00:23 +00:00
|
|
|
class AbstractContainerNode;
|
|
|
|
class Attr;
|
|
|
|
class EventDispatcher;
|
|
|
|
|
|
|
|
|
|
|
|
class XML_API AbstractNode : public Node
|
|
|
|
/// AbstractNode provides a basic implementation
|
|
|
|
/// of the Node interface for all types of nodes
|
|
|
|
/// that do not contain other nodes.
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
// Node
|
|
|
|
const XMLString & nodeName() const;
|
|
|
|
const XMLString & getNodeValue() const;
|
|
|
|
void setNodeValue(const XMLString & value);
|
|
|
|
Node * parentNode() const;
|
|
|
|
NodeList * childNodes() const;
|
|
|
|
Node * firstChild() const;
|
|
|
|
Node * lastChild() const;
|
|
|
|
Node * previousSibling() const;
|
|
|
|
Node * nextSibling() const;
|
|
|
|
NamedNodeMap * attributes() const;
|
|
|
|
Document * ownerDocument() const;
|
|
|
|
Node * insertBefore(Node * newChild, Node * refChild);
|
|
|
|
Node * replaceChild(Node * newChild, Node * oldChild);
|
|
|
|
Node * removeChild(Node * oldChild);
|
|
|
|
Node * appendChild(Node * newChild);
|
|
|
|
bool hasChildNodes() const;
|
|
|
|
Node * cloneNode(bool deep) const;
|
|
|
|
void normalize();
|
|
|
|
bool isSupported(const XMLString & feature, const XMLString & version) const;
|
|
|
|
const XMLString & namespaceURI() const;
|
|
|
|
XMLString prefix() const;
|
|
|
|
const XMLString & localName() const;
|
|
|
|
bool hasAttributes() const;
|
|
|
|
|
|
|
|
// EventTarget
|
|
|
|
void addEventListener(const XMLString & type, EventListener * listener, bool useCapture);
|
|
|
|
void removeEventListener(const XMLString & type, EventListener * listener, bool useCapture);
|
|
|
|
bool dispatchEvent(Event * evt);
|
|
|
|
|
|
|
|
// Extensions
|
|
|
|
XMLString innerText() const;
|
|
|
|
Node * getNodeByPath(const XMLString & path) const;
|
|
|
|
Node * getNodeByPathNS(const XMLString & path, const NSMap & nsMap) const;
|
|
|
|
|
|
|
|
virtual void autoRelease();
|
|
|
|
|
|
|
|
protected:
|
|
|
|
AbstractNode(Document * pOwnerDocument);
|
|
|
|
AbstractNode(Document * pOwnerDocument, const AbstractNode & node);
|
|
|
|
~AbstractNode();
|
|
|
|
|
|
|
|
virtual Node * copyNode(bool deep, Document * pOwnerDocument) const = 0;
|
|
|
|
|
|
|
|
virtual bool events() const;
|
|
|
|
virtual bool eventsSuspended() const;
|
|
|
|
void captureEvent(Event * evt);
|
|
|
|
void bubbleEvent(Event * evt);
|
|
|
|
void dispatchSubtreeModified();
|
|
|
|
void dispatchNodeInserted();
|
|
|
|
void dispatchNodeRemoved();
|
|
|
|
virtual void dispatchNodeRemovedFromDocument();
|
|
|
|
virtual void dispatchNodeInsertedIntoDocument();
|
|
|
|
void dispatchAttrModified(
|
|
|
|
Attr * pAttr, MutationEvent::AttrChangeType changeType, const XMLString & prevValue, const XMLString & newValue);
|
|
|
|
void dispatchCharacterDataModified(const XMLString & prevValue, const XMLString & newValue);
|
|
|
|
void setOwnerDocument(Document * pOwnerDocument);
|
|
|
|
|
|
|
|
static const XMLString EMPTY_STRING;
|
|
|
|
|
|
|
|
private:
|
|
|
|
AbstractNode();
|
|
|
|
|
|
|
|
AbstractContainerNode * _pParent;
|
|
|
|
AbstractNode * _pNext;
|
|
|
|
Document * _pOwner;
|
|
|
|
EventDispatcher * _pEventDispatcher;
|
|
|
|
|
|
|
|
static const XMLString NODE_NAME;
|
|
|
|
|
|
|
|
friend class AbstractContainerNode;
|
|
|
|
friend class Document;
|
|
|
|
friend class DocumentFragment;
|
|
|
|
friend class Element;
|
|
|
|
friend class Attr;
|
|
|
|
friend class CharacterData;
|
|
|
|
friend class DOMBuilder;
|
|
|
|
friend class NodeAppender;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
} // namespace Poco::XML
|
2023-02-08 11:04:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
#endif // DOM_AbstractNode_INCLUDED
|