GDAL
cpl_minixml.h
Go to the documentation of this file.
1/**********************************************************************
2 * $Id$
3 *
4 * Project: CPL - Common Portability Library
5 * Purpose: Declarations for MiniXML Handler.
6 * Author: Frank Warmerdam, warmerdam@pobox.com
7 *
8 **********************************************************************
9 * Copyright (c) 2001, Frank Warmerdam
10 *
11 * Permission is hereby granted, free of charge, to any person obtaining a
12 * copy of this software and associated documentation files (the "Software"),
13 * to deal in the Software without restriction, including without limitation
14 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
15 * and/or sell copies of the Software, and to permit persons to whom the
16 * Software is furnished to do so, subject to the following conditions:
17 *
18 * The above copyright notice and this permission notice shall be included
19 * in all copies or substantial portions of the Software.
20 *
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
24 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
26 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
27 * DEALINGS IN THE SOFTWARE.
28 ****************************************************************************/
29
30#ifndef CPL_MINIXML_H_INCLUDED
31#define CPL_MINIXML_H_INCLUDED
32
33#include "cpl_port.h"
34
42
52
54typedef struct CPLXMLNode CPLXMLNode;
70{
78
100 char *pszValue;
101
110
122};
123
124CPLXMLNode CPL_DLL *CPLParseXMLString(const char *);
125void CPL_DLL CPLDestroyXMLNode(CPLXMLNode *);
126CPLXMLNode CPL_DLL *CPLGetXMLNode(CPLXMLNode *poRoot, const char *pszPath);
127#if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
129extern "C++"
130{
131 inline const CPLXMLNode *CPLGetXMLNode(const CPLXMLNode *poRoot,
132 const char *pszPath)
133 {
134 return const_cast<const CPLXMLNode *>(
135 CPLGetXMLNode(const_cast<CPLXMLNode *>(poRoot), pszPath));
136 }
137}
139#endif
140CPLXMLNode CPL_DLL *CPLSearchXMLNode(CPLXMLNode *poRoot, const char *pszTarget);
141#if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
143extern "C++"
144{
145 inline const CPLXMLNode *CPLSearchXMLNode(const CPLXMLNode *poRoot,
146 const char *pszTarget)
147 {
148 return const_cast<const CPLXMLNode *>(
149 CPLSearchXMLNode(const_cast<CPLXMLNode *>(poRoot), pszTarget));
150 }
151}
153#endif
154const char CPL_DLL *CPLGetXMLValue(const CPLXMLNode *poRoot,
155 const char *pszPath, const char *pszDefault);
157 const char *pszText);
158char CPL_DLL *CPLSerializeXMLTree(const CPLXMLNode *psNode);
159void CPL_DLL CPLAddXMLChild(CPLXMLNode *psParent, CPLXMLNode *psChild);
160int CPL_DLL CPLRemoveXMLChild(CPLXMLNode *psParent, CPLXMLNode *psChild);
161void CPL_DLL CPLAddXMLSibling(CPLXMLNode *psOlderSibling,
162 CPLXMLNode *psNewSibling);
164 const char *pszName,
165 const char *pszValue);
166void CPL_DLL CPLAddXMLAttributeAndValue(CPLXMLNode *psParent,
167 const char *pszName,
168 const char *pszValue);
169CPLXMLNode CPL_DLL *CPLCloneXMLTree(const CPLXMLNode *psTree);
170int CPL_DLL CPLSetXMLValue(CPLXMLNode *psRoot, const char *pszPath,
171 const char *pszValue);
172void CPL_DLL CPLStripXMLNamespace(CPLXMLNode *psRoot, const char *pszNameSpace,
173 int bRecurse);
174void CPL_DLL CPLCleanXMLElementName(char *);
175
176CPLXMLNode CPL_DLL *CPLParseXMLFile(const char *pszFilename);
177int CPL_DLL CPLSerializeXMLTreeToFile(const CPLXMLNode *psTree,
178 const char *pszFilename);
179
181
182#if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
183
184extern "C++"
185{
186#ifndef DOXYGEN_SKIP
187#include <memory>
188#endif
189
191 struct CPL_DLL CPLXMLTreeCloserDeleter
192 {
193 void operator()(CPLXMLNode *psNode) const
194 {
195 CPLDestroyXMLNode(psNode);
196 }
197 };
204 class CPL_DLL CPLXMLTreeCloser
205 : public std::unique_ptr<CPLXMLNode, CPLXMLTreeCloserDeleter>
206 {
207 public:
210 : std::unique_ptr<CPLXMLNode, CPLXMLTreeCloserDeleter>(data)
211 {
212 }
213
216 CPLXMLNode *getDocumentElement();
217 };
218
219} // extern "C++"
220
221#endif /* __cplusplus */
222
223#endif /* CPL_MINIXML_H_INCLUDED */
Manage a tree of XML nodes so that all nodes are freed when the instance goes out of scope.
Definition cpl_minixml.h:206
CPLXMLTreeCloser(CPLXMLNode *data)
Constructor.
Definition cpl_minixml.h:209
CPLXMLNode * CPLSearchXMLNode(CPLXMLNode *poRoot, const char *pszTarget)
Search for a node in document.
Definition cpl_minixml.cpp:1473
void CPLAddXMLAttributeAndValue(CPLXMLNode *psParent, const char *pszName, const char *pszValue)
Create an attribute and text value.
Definition cpl_minixml.cpp:1902
CPLXMLNode * CPLParseXMLString(const char *)
Parse an XML string into tree form.
Definition cpl_minixml.cpp:611
CPLXMLNode * CPLCreateXMLElementAndValue(CPLXMLNode *psParent, const char *pszName, const char *pszValue)
Create an element and text value.
Definition cpl_minixml.cpp:1863
CPLXMLNode * CPLGetXMLNode(CPLXMLNode *poRoot, const char *pszPath)
Find node by path.
Definition cpl_minixml.cpp:1563
void CPLStripXMLNamespace(CPLXMLNode *psRoot, const char *pszNameSpace, int bRecurse)
Strip indicated namespaces.
Definition cpl_minixml.cpp:2071
void CPLCleanXMLElementName(char *)
Make string into safe XML token.
Definition cpl_minixml.cpp:2245
int CPLSetXMLValue(CPLXMLNode *psRoot, const char *pszPath, const char *pszValue)
Set element value by path.
Definition cpl_minixml.cpp:1980
CPLXMLNode * CPLCreateXMLNode(CPLXMLNode *poParent, CPLXMLNodeType eType, const char *pszText)
Create an document tree item.
Definition cpl_minixml.cpp:1311
void CPLDestroyXMLNode(CPLXMLNode *)
Destroy a tree.
Definition cpl_minixml.cpp:1417
const char * CPLGetXMLValue(const CPLXMLNode *poRoot, const char *pszPath, const char *pszDefault)
Fetch element/attribute value.
Definition cpl_minixml.cpp:1661
int CPLRemoveXMLChild(CPLXMLNode *psParent, CPLXMLNode *psChild)
Remove child node from parent.
Definition cpl_minixml.cpp:1776
void CPLAddXMLSibling(CPLXMLNode *psOlderSibling, CPLXMLNode *psNewSibling)
Add new sibling.
Definition cpl_minixml.cpp:1820
CPLXMLNode * CPLParseXMLFile(const char *pszFilename)
Parse XML file into tree.
Definition cpl_minixml.cpp:2139
CPLXMLNode * CPLCloneXMLTree(const CPLXMLNode *psTree)
Copy tree.
Definition cpl_minixml.cpp:1925
void CPLAddXMLChild(CPLXMLNode *psParent, CPLXMLNode *psChild)
Add child node to parent.
Definition cpl_minixml.cpp:1722
CPLXMLNodeType
XML node type.
Definition cpl_minixml.h:45
@ CXT_Literal
Definition cpl_minixml.h:50
@ CXT_Element
Definition cpl_minixml.h:46
@ CXT_Comment
Definition cpl_minixml.h:49
@ CXT_Text
Definition cpl_minixml.h:47
@ CXT_Attribute
Definition cpl_minixml.h:48
int CPLSerializeXMLTreeToFile(const CPLXMLNode *psTree, const char *pszFilename)
Write document tree to a file.
Definition cpl_minixml.cpp:2177
char * CPLSerializeXMLTree(const CPLXMLNode *psNode)
Convert tree into string document.
Definition cpl_minixml.cpp:1267
Core portability definitions for CPL.
#define CPL_C_END
Macro to end a block of C symbols.
Definition cpl_port.h:317
#define CPL_C_START
Macro to start a block of C symbols.
Definition cpl_port.h:313
Document node structure.
Definition cpl_minixml.h:70
struct CPLXMLNode * psChild
Child node.
Definition cpl_minixml.h:121
CPLXMLNodeType eType
Node type.
Definition cpl_minixml.h:77
struct CPLXMLNode * psNext
Next sibling.
Definition cpl_minixml.h:109
char * pszValue
Node value.
Definition cpl_minixml.h:100