AbstractContainerNode.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. //
  2. // AbstractContainerNode.h
  3. //
  4. // Library: XML
  5. // Package: DOM
  6. // Module: DOM
  7. //
  8. // Definition of the AbstractContainerNode class.
  9. //
  10. // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
  11. // and Contributors.
  12. //
  13. // SPDX-License-Identifier: BSL-1.0
  14. //
  15. #ifndef DOM_AbstractContainerNode_INCLUDED
  16. #define DOM_AbstractContainerNode_INCLUDED
  17. #include "Poco/XML/XML.h"
  18. #include "Poco/DOM/AbstractNode.h"
  19. namespace Poco {
  20. namespace XML {
  21. class XML_API AbstractContainerNode: public AbstractNode
  22. /// AbstractContainerNode is an implementation of Node
  23. /// that stores and manages child nodes.
  24. ///
  25. /// Child nodes are organized in a single linked list.
  26. {
  27. public:
  28. // Node
  29. Node* firstChild() const;
  30. Node* lastChild() const;
  31. Node* insertBefore(Node* newChild, Node* refChild);
  32. Node* replaceChild(Node* newChild, Node* oldChild);
  33. Node* removeChild(Node* oldChild);
  34. Node* appendChild(Node* newChild);
  35. bool hasChildNodes() const;
  36. bool hasAttributes() const;
  37. Node* getNodeByPath(const XMLString& path) const;
  38. Node* getNodeByPathNS(const XMLString& path, const NSMap& nsMap) const;
  39. protected:
  40. AbstractContainerNode(Document* pOwnerDocument);
  41. AbstractContainerNode(Document* pOwnerDocument, const AbstractContainerNode& node);
  42. ~AbstractContainerNode();
  43. void dispatchNodeRemovedFromDocument();
  44. void dispatchNodeInsertedIntoDocument();
  45. static const Node* findNode(XMLString::const_iterator& it, const XMLString::const_iterator& end, const Node* pNode, const NSMap* pNSMap);
  46. static const Node* findElement(const XMLString& name, const Node* pNode, const NSMap* pNSMap);
  47. static const Node* findElement(int index, const Node* pNode, const NSMap* pNSMap);
  48. static const Node* findElement(const XMLString& attr, const XMLString& value, const Node* pNode, const NSMap* pNSMap);
  49. static const Attr* findAttribute(const XMLString& name, const Node* pNode, const NSMap* pNSMap);
  50. bool hasAttributeValue(const XMLString& name, const XMLString& value, const NSMap* pNSMap) const;
  51. static bool namesAreEqual(const Node* pNode1, const Node* pNode2, const NSMap* pNSMap);
  52. static bool namesAreEqual(const Node* pNode, const XMLString& name, const NSMap* pNSMap);
  53. static const XMLString WILDCARD;
  54. private:
  55. AbstractNode* _pFirstChild;
  56. friend class AbstractNode;
  57. friend class NodeAppender;
  58. };
  59. } } // namespace Poco::XML
  60. #endif // DOM_AbstractContainerNode_INCLUDED