DCL 3.7.4
Loading...
Searching...
No Matches
XMLParser.cpp File Reference
#include <dcl/XMLParser.h>
#include <dcl/Charset.h>

Go to the source code of this file.

Functions

__DCL_BEGIN_NAMESPACE IMPLEMENT_CLASSINFO (XmlException, Exception) XmlException
 IMPLEMENT_CLASSINFO (XmlDefaultHandler, Object) void XmlDefaultHandler
 IMPLEMENT_CLASSINFO (XmlParser, Object) XmlParser
 IMPLEMENT_CLASSINFO (XmlNode, Object) IMPLEMENT_CLASSINFO(XmlCharsNode
 IMPLEMENT_CLASSINFO (XmlElement, XmlNode) String XmlElement
 IMPLEMENT_CLASSINFO (XmlDocument, XmlDefaultHandler) String XmlDocument

Function Documentation

◆ IMPLEMENT_CLASSINFO() [1/6]

IMPLEMENT_CLASSINFO ( XmlDefaultHandler ,
Object  )

Definition at line 66 of file XMLParser.cpp.

71{
72#ifdef XML_UNICODE_WCHAR_T
73 String name = _name;
74 StringStringArray attrs;
75 while (*_attrs) {
76 String key = *_attrs++;
77 String value = *_attrs++;
78 attrs.add(StringString(key, value));
79 }
80#else
81 UTF8Decoder decoder;
82 String name = decoder.decode(_name);
83 StringStringArray attrs;
84 while (*_attrs) {
85 String key = decoder.decode(*_attrs++);
86 String value = decoder.decode(*_attrs++);
87 attrs.add(StringString(key, value));
88 }
89#endif
90 XmlDefaultHandler* pHandler = (XmlDefaultHandler*) _userData;
91 pHandler->startElement(name, attrs);
92}

◆ IMPLEMENT_CLASSINFO() [2/6]

IMPLEMENT_CLASSINFO ( XmlDocument ,
XmlDefaultHandler  )

Definition at line 289 of file XMLParser.cpp.

292{
293 String s;
294 if (__topElement)
295 s = __topElement->toString();
296 return s;
297}
298
300{
301 __currentElement = NULL;
302 __topElement = NULL;
303}
#define NULL
Definition Config.h:312

◆ IMPLEMENT_CLASSINFO() [3/6]

IMPLEMENT_CLASSINFO ( XmlElement ,
XmlNode  )

Definition at line 204 of file XMLParser.cpp.

207{
208 StringBuilder r;
209
210 r.append(__T("<")).append(__name);
211 for (StringStringArray::ConstIterator it = __attrs.begin();
212 it != __attrs.end(); it++) {
213 r.append(__T(" ")).append((*it).key).append(__T("=\""))
214 .append(String::escape((*it).value, (*it).value.length(), String::ESCAPE_XML))
215 .append(__T("\""));
216 }
217
218 if (__children.isEmpty()) {
219 r.append(__T(" >"));
220 }
221 else {
222 r.append(__T(">"))
223 .append(innerXml())
224 .append(__T("</")).append(__name).append(__T(">"));
225 }
226
227 return r;
228}
229
231const String& _name, const StringStringArray& _attrs
232) : XmlNode(_parentNode)
233{
234 __name = _name;
235 __attrs = _attrs;
236}
IOException *size_t r
Definition MediaInfo.cpp:82
#define __T(str)
Definition Object.h:60
XmlElement(XmlNode *_parentNode, const String &_name, const StringStringArray &_attrs)

◆ IMPLEMENT_CLASSINFO() [4/6]

__DCL_BEGIN_NAMESPACE IMPLEMENT_CLASSINFO ( XmlException ,
Exception  )

NOTES 2011-09-20

Expat 2.0.1 http://expat.sourceforge.net/

In expat_external.h XML_UNICODE UTF-16 XML_UNICODE_WCHAR_T wchar_t

Expat 현 버전은 wchar_t를 16비트 UCS2로 사용한다. 이로 인하여 다음의 주의할점이 있다.

Microsoft Windows 32bits, 64bits 모두 16비트 UCS2 wchar_t를 사용한다.

GNU/Linux 31bits, 64bits 모두 32비트 UCS4 wchar_t를 사용한다. gcc에서 -fshort-wchar을 사용할 경우 glibc의 루틴을 사용할 수 없다.

expat를 빌드할 때, XML_UNICODE_WCHAR_T를 사용해도 16비트 wchar_t로 빌드된다.

Definition at line 41 of file XMLParser.cpp.

44{
45 const XML_LChar* psz = XML_ErrorString(XML_GetErrorCode(_parser));
46 const wchar_t* wpsz = NULL;
47#ifdef XML_UNICODE_WCHAR_T
48 wpsz = psz;
49#else
50 UTF8Decoder decoder;
51 String str = decoder.decode(psz);
52 wpsz = str.data();
53#endif
54 __message = String::format(
55 __T("%ls at line %d"),
56 wpsz,
57 XML_GetCurrentLineNumber(_parser)
58 );
59}

◆ IMPLEMENT_CLASSINFO() [5/6]

IMPLEMENT_CLASSINFO ( XmlNode ,
Object  )

◆ IMPLEMENT_CLASSINFO() [6/6]

IMPLEMENT_CLASSINFO ( XmlParser ,
Object  )

Definition at line 142 of file XMLParser.cpp.

145{
146 __parser = XML_ParserCreate(NULL);
147}