diff options
Diffstat (limited to 'core/include')
-rw-r--r-- | core/include/fxcrt/fx_xml.h | 40 |
1 files changed, 16 insertions, 24 deletions
diff --git a/core/include/fxcrt/fx_xml.h b/core/include/fxcrt/fx_xml.h index eaf872c164..e1255c1f30 100644 --- a/core/include/fxcrt/fx_xml.h +++ b/core/include/fxcrt/fx_xml.h @@ -7,7 +7,9 @@ #ifndef CORE_INCLUDE_FXCRT_FX_XML_H_ #define CORE_INCLUDE_FXCRT_FX_XML_H_ -#include "fx_basic.h" +#include <vector> + +#include "core/include/fxcrt/fx_basic.h" class CXML_AttrItem { public: @@ -15,6 +17,7 @@ class CXML_AttrItem { CFX_ByteString m_AttrName; CFX_WideString m_Value; }; + class CXML_AttrMap { public: CXML_AttrMap() { m_pMap = NULL; } @@ -30,6 +33,7 @@ class CXML_AttrMap { CXML_AttrItem& GetAt(int index) const; CFX_ObjectArray<CXML_AttrItem>* m_pMap; }; + class CXML_Content { public: CXML_Content() : m_bCDATA(FALSE), m_Content() {} @@ -40,8 +44,11 @@ class CXML_Content { FX_BOOL m_bCDATA; CFX_WideString m_Content; }; + class CXML_Element { public: + enum ChildType { Invalid, Element, Content }; + static CXML_Element* Parse(const void* pBuffer, size_t size, FX_BOOL bSaveSpaceChars = FALSE, @@ -52,31 +59,23 @@ class CXML_Element { static CXML_Element* Parse(IFX_BufferRead* pBuffer, FX_BOOL bSaveSpaceChars = FALSE, FX_FILESIZE* pParsedSize = NULL); + CXML_Element(const CFX_ByteStringC& qSpace, const CFX_ByteStringC& tagName); CXML_Element(const CFX_ByteStringC& qTagName); CXML_Element(); - ~CXML_Element(); void Empty(); - CFX_ByteString GetTagName(FX_BOOL bQualified = FALSE) const; - CFX_ByteString GetNamespace(FX_BOOL bQualified = FALSE) const; - CFX_ByteString GetNamespaceURI(const CFX_ByteStringC& qName) const; - CXML_Element* GetParent() const { return m_pParent; } - FX_DWORD CountAttrs() const { return m_AttrMap.GetSize(); } - void GetAttrByIndex(int index, CFX_ByteString& space, CFX_ByteString& name, CFX_WideString& value) const; - FX_BOOL HasAttr(const CFX_ByteStringC& qName) const; - FX_BOOL GetAttrValue(const CFX_ByteStringC& name, CFX_WideString& attribute) const; CFX_WideString GetAttrValue(const CFX_ByteStringC& name) const { @@ -129,16 +128,10 @@ class CXML_Element { return attr; } - FX_DWORD CountChildren() const; - - enum ChildType { Invalid, Element, Content }; - + FX_DWORD CountChildren() const { return m_Children.size(); } ChildType GetChildType(FX_DWORD index) const; - CFX_WideString GetContent(FX_DWORD index) const; - CXML_Element* GetElement(FX_DWORD index) const; - CXML_Element* GetElement(const CFX_ByteStringC& space, const CFX_ByteStringC& tag) const { return GetElement(space, tag, 0); @@ -146,29 +139,28 @@ class CXML_Element { FX_DWORD CountElements(const CFX_ByteStringC& space, const CFX_ByteStringC& tag) const; - CXML_Element* GetElement(const CFX_ByteStringC& space, const CFX_ByteStringC& tag, int index) const; FX_DWORD FindElement(CXML_Element* pChild) const; - void SetTag(const CFX_ByteStringC& qSpace, const CFX_ByteStringC& tagname); - void SetTag(const CFX_ByteStringC& qTagName); - void RemoveChildren(); - void RemoveChild(FX_DWORD index); protected: + struct ChildRecord { + ChildType type; + void* child; // CXML_Element and CXML_Content lack a common ancestor. + }; + CXML_Element* m_pParent; CFX_ByteString m_QSpaceName; CFX_ByteString m_TagName; - CXML_AttrMap m_AttrMap; + std::vector<ChildRecord> m_Children; - CFX_PtrArray m_Children; friend class CXML_Parser; friend class CXML_Composer; }; |