/usr/include/dcmtk/dcmsr/dsrxmld.h is in libdcmtk-dev 3.6.2-3build3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 | /*
*
* Copyright (C) 2003-2016, OFFIS e.V.
* All rights reserved. See COPYRIGHT file for details.
*
* This software and supporting documentation were developed by
*
* OFFIS e.V.
* R&D Division Health
* Escherweg 2
* D-26121 Oldenburg, Germany
*
*
* Module: dcmsr
*
* Author: Joerg Riesmeier
*
* Purpose:
* classes: DSRXMLDocument
*
*/
#ifndef DSRXMLD_H
#define DSRXMLD_H
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
#include "dcmtk/dcmsr/dsrtypes.h"
#include "dcmtk/dcmsr/dsrxmlc.h"
/*--------------------*
* type definitions *
*--------------------*/
#ifndef WITH_LIBXML
// define types if 'libxml' absent
typedef void (*xmlDocPtr);
typedef void (*xmlCharEncodingHandlerPtr);
typedef char xmlChar;
#endif
/*---------------------*
* class declaration *
*---------------------*/
/** Class for XML documents.
* This class encapsulates the access to the 'libxml' routines. Since the
* public interface of this class does not use any 'libxml' specific data
* structures it should be possible to replace the XML library with little
* effort (if required).
*/
class DCMTK_DCMSR_EXPORT DSRXMLDocument
: protected DSRTypes
{
public:
// --- constructors and destructor ---
/** default constructor
*/
DSRXMLDocument();
/** destructor
*/
virtual ~DSRXMLDocument();
// --- misc routines ---
/** clear all internal member variables
*/
void clear();
/** check whether the current internal state is valid
** @return OFTrue if valid, OFFalse otherwise
*/
OFBool valid() const;
// --- input and output ---
/** read XML document from file.
* In order to enable the optional Schema validation the flag DSRTypes::XF_validateSchema
* has to be set.
** @param filename name of the file from which the XML document is read
* ("-" for stdin)
* @param flags optional flag used to customize the reading process
* (see DSRTypes::XF_xxx)
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition read(const OFString &filename,
const size_t flags = 0);
// --- character encoding ---
/** check whether the currently set character encoding handler is valid.
* If no encoding handler is set this is equivalent to an invalid handler.
** @return OFTrue if handler is valid, OFFalse otherwise
*/
OFBool encodingHandlerValid() const;
/** set the specified character encoding handler.
* NB: 'libxml' relies on GNU 'libiconv' for most character sets.
** @param charset XML name of the character set (e.g. "ISO-8859-1" for ISO Latin-1)
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition setEncodingHandler(const char *charset);
// --- navigation and checking ---
/** get root node of the document
** @return cursor pointing to the root node if successful, invalid cursor otherwise
*/
DSRXMLCursor getRootNode() const;
/** get a particular named node of the document.
* Please note that the search process is limited to the current node level, i.e. no
* deep search is performed.
** @param cursor cursor pointing to the node where to start from
* @param name name of the node (XML element) to be searched for
* @param required flag specifying whether the node is required or not. If the node
* is required to be present an error message is reported.
** @return cursor pointing to the named node if successful, invalid cursor otherwise
*/
DSRXMLCursor getNamedNode(const DSRXMLCursor &cursor,
const char *name,
const OFBool required = OFTrue) const;
/** check whether particular node matches a given name
** @param cursor cursor pointing to the particular node
* @param name name of the node (XML element) to be checked
** @return OFTrue if name matches, OFFalse otherwise
*/
OFBool matchNode(const DSRXMLCursor &cursor,
const char *name) const;
/** check whether particular node matches a given name and report an error if not
** @param cursor cursor pointing to the particular node
* @param name name of the node (XML element) to be checked
** @return OFTrue if name matches, OFFalse otherwise
*/
OFCondition checkNode(const DSRXMLCursor &cursor,
const char *name) const;
// --- get attributes and node content ---
/** check whether particular node has a specific attribute
** @param cursor cursor pointing to the particular node
* @param name name of the XML attribute to be checked
** @return OFTrue if attribute is present, OFFalse otherwise
*/
OFBool hasAttribute(const DSRXMLCursor &cursor,
const char *name) const;
/** get string value from particular XML attribute.
* The result variable 'stringValue' is automatically cleared at the beginning.
** @param cursor cursor pointing to the particular node
* @param stringValue reference to string object in which the value should be stored
* @param name name of the XML attribute to be retrieved
* @param encoding use encoding handler if OFTrue, ignore character set otherwise
* @param required flag specifying whether the attribute is required or not. If the
* attribute is required to be present an error message is reported
* in case it is not found.
** @return reference to string object (might be empty)
*/
OFString &getStringFromAttribute(const DSRXMLCursor &cursor,
OFString &stringValue,
const char *name,
const OFBool encoding = OFFalse,
const OFBool required = OFTrue) const;
/** get element value from particular XML attribute
** @param cursor cursor pointing to the particular node
* @param delem DICOM element in which the attribute value is stored
* @param name name of the XML attribute to be retrieved
* @param encoding use encoding handler if OFTrue, ignore character set otherwise
* @param required flag specifying whether the attribute is required or not. If the
* attribute is required to be present an error message is reported
* in case it is not found.
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition getElementFromAttribute(const DSRXMLCursor &cursor,
DcmElement &delem,
const char *name,
const OFBool encoding = OFFalse,
const OFBool required = OFTrue) const;
/** get string value from particular XML element
** @param cursor cursor pointing to the particular node
* @param stringValue reference to string object in which the value should be stored
* @param name name of the XML element to be retrieved
* @param encoding use encoding handler if OFTrue, ignore character set otherwise
* @param clearString flag specifying whether to clear the 'stringValue' at first or not
** @return reference to string object (might be empty)
*/
OFString &getStringFromNodeContent(const DSRXMLCursor &cursor,
OFString &stringValue,
const char *name = NULL,
const OFBool encoding = OFFalse,
const OFBool clearString = OFTrue) const;
/** get element value from particular XML element
** @param cursor cursor pointing to the particular node
* @param delem DICOM element in which the element value is stored
* @param name name of the XML element to be retrieved
* @param encoding use encoding handler if OFTrue, ignore character set otherwise
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition getElementFromNodeContent(const DSRXMLCursor &cursor,
DcmElement &delem,
const char *name = NULL,
const OFBool encoding = OFFalse) const;
/** get value type from particular node.
* The value type is either stored as the element name or in the attribute "valType".
* Additionally, by-reference relationships are also supported (either by attribute
* "ref" being present or element named "reference").
** @param cursor cursor pointing to the particular node
** @return value type (incl. by-reference) if successful, DSRTypes::VT_invalid otherwise
*/
E_ValueType getValueTypeFromNode(const DSRXMLCursor &cursor) const;
/** get relationship type from particular node.
* The relationship type is either stored in the element "relationship" or in the
* attribute "relType".
** @param cursor cursor pointing to the particular node
** @return relationship type if successful, DSRTypes::RT_invalid or DSRTypes::RT_unknown
* otherwise
*/
E_RelationshipType getRelationshipTypeFromNode(const DSRXMLCursor &cursor) const;
// --- error/warning messages ---
/** print warning message for unexpected node
** @param cursor cursor pointing to the unexpected node
*/
void printUnexpectedNodeWarning(const DSRXMLCursor &cursor) const;
/** print warning message for missing attribute
** @param cursor cursor pointing to the relevant node
* @param name name of the XML attribute
*/
void printMissingAttributeWarning(const DSRXMLCursor &cursor,
const char *name) const;
/** print general node error message
** @param cursor cursor pointing to the unexpected node
* @param result status used to print details on the error (no message if EC_Normal)
*/
void printGeneralNodeError(const DSRXMLCursor &cursor,
const OFCondition &result) const;
protected:
/** convert given string from 'libxml' format (UTF8) to current character set
** @param fromString character string to be converted
* @param toString reference to string object in which the result should be stored
** @return OFTrue if successful, OFFalse otherwise (e.g. no handler selected)
*/
OFBool convertUtf8ToCharset(const xmlChar *fromString,
OFString &toString) const;
/** print error message for missing attribute
** @param cursor cursor pointing to the relevant node
* @param name name of the XML attribute
*/
void printMissingAttributeError(const DSRXMLCursor &cursor,
const char *name) const;
// --- static function ---
/** get the full path (incl.\ all predecessors) to the current node
** @param cursor cursor pointing to the relevant node
* @param stringValue reference to string object in which the result should be stored
* @param omitCurrent flag indicating whether to omit the current node or not
** @return resulting character string, set to "<invalid>" in case of an invalid 'cursor'
*/
static OFString &getFullNodePath(const DSRXMLCursor &cursor,
OFString &stringValue,
const OFBool omitCurrent = OFFalse);
private:
/// pointer to the internal representation of the XML document (libxml)
xmlDocPtr Document;
/// pointer to the currently selected character encoding handler (libxml)
xmlCharEncodingHandlerPtr EncodingHandler;
// --- declaration copy constructor and assignment operator
DSRXMLDocument(const DSRXMLDocument &);
DSRXMLDocument &operator=(const DSRXMLDocument &);
};
#endif
|