source: trunk/contrib/cppunit-1.12.2/include/cppunit/tools/XmlElement.h @ 876

Last change on this file since 876 was 876, checked in by sam, 9 years ago

contrib: add a precompiled Win32 version of CppUnit and update build system
accordingly.

File size: 4.3 KB
Line 
1#ifndef CPPUNIT_TOOLS_XMLELEMENT_H
2#define CPPUNIT_TOOLS_XMLELEMENT_H
3
4#include <cppunit/Portability.h>
5
6#if CPPUNIT_NEED_DLL_DECL
7#pragma warning( push )
8#pragma warning( disable: 4251 )  // X needs to have dll-interface to be used by clients of class Z
9#endif
10
11#include <cppunit/portability/CppUnitDeque.h>
12#include <string>
13
14
15CPPUNIT_NS_BEGIN
16
17
18class XmlElement;
19
20#if CPPUNIT_NEED_DLL_DECL
21//  template class CPPUNIT_API std::deque<XmlElement *>;
22#endif
23
24
25/*! \brief A XML Element.
26 *
27 * A XML element has:
28 * - a name, specified on construction,
29 * - a content, specified on construction (may be empty),
30 * - zero or more attributes, added with addAttribute(),
31 * - zero or more child elements, added with addElement().
32 */
33class CPPUNIT_API XmlElement
34{
35public:
36  /*! \brief Constructs an element with the specified name and string content.
37   * \param elementName Name of the element. Must not be empty.
38   * \param content Content of the element.
39   */
40  XmlElement( std::string elementName,
41              std::string content ="" );
42
43  /*! \brief Constructs an element with the specified name and numeric content.
44   * \param elementName Name of the element. Must not be empty.
45   * \param numericContent Content of the element.
46   */
47  XmlElement( std::string elementName,
48              int numericContent );
49
50  /*! \brief Destructs the element and its child elements.
51   */
52  virtual ~XmlElement();
53
54  /*! \brief Returns the name of the element.
55   * \return Name of the element.
56   */
57  std::string name() const;
58
59  /*! \brief Returns the content of the element.
60   * \return Content of the element.
61   */
62  std::string content() const;
63
64  /*! \brief Sets the name of the element.
65   * \param name New name for the element.
66   */
67  void setName( const std::string &name );
68
69  /*! \brief Sets the content of the element.
70   * \param content New content for the element.
71   */
72  void setContent( const std::string &content );
73
74  /*! \overload void setContent( const std::string &content )
75   */
76  void setContent( int numericContent );
77
78  /*! \brief Adds an attribute with the specified string value.
79   * \param attributeName Name of the attribute. Must not be an empty.
80   * \param value Value of the attribute.
81   */
82  void addAttribute( std::string attributeName,
83                     std::string value );
84
85  /*! \brief Adds an attribute with the specified numeric value.
86   * \param attributeName Name of the attribute. Must not be empty.
87   * \param numericValue Numeric value of the attribute.
88   */
89  void addAttribute( std::string attributeName,
90                     int numericValue );
91
92  /*! \brief Adds a child element to the element.
93   * \param element Child element to add. Must not be \c NULL.
94   */
95  void addElement( XmlElement *element );
96
97  /*! \brief Returns the number of child elements.
98   * \return Number of child elements (element added with addElement()).
99   */
100  int elementCount() const;
101
102  /*! \brief Returns the child element at the specified index.
103   * \param index Zero based index of the element to return.
104   * \returns Element at the specified index. Never \c NULL.
105   * \exception std::invalid_argument if \a index < 0 or index >= elementCount().
106   */
107  XmlElement *elementAt( int index ) const;
108
109  /*! \brief Returns the first child element with the specified name.
110   * \param name Name of the child element to return.
111   * \return First child element found which is named \a name.
112   * \exception std::invalid_argument if there is no child element with the specified
113   *            name.
114   */
115  XmlElement *elementFor( const std::string &name ) const;
116
117  /*! \brief Returns a XML string that represents the element.
118   * \param indent String of spaces representing the amount of 'indent'.
119   * \return XML string that represents the element, its attributes and its
120   *         child elements.
121   */
122  std::string toString( const std::string &indent = "" ) const;
123
124private:
125  typedef std::pair<std::string,std::string> Attribute;
126
127  std::string attributesAsString() const;
128  std::string escape( std::string value ) const;
129
130private:
131  std::string m_name;
132  std::string m_content;
133
134  typedef CppUnitDeque<Attribute> Attributes;
135  Attributes m_attributes;
136
137  typedef CppUnitDeque<XmlElement *> Elements;
138  Elements m_elements;
139};
140
141
142CPPUNIT_NS_END
143
144#if CPPUNIT_NEED_DLL_DECL
145#pragma warning( pop )
146#endif
147
148
149#endif  // CPPUNIT_TOOLS_XMLELEMENT_H
Note: See TracBrowser for help on using the repository browser.