-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathxmlservices.prg
More file actions
66 lines (54 loc) · 1.62 KB
/
xmlservices.prg
File metadata and controls
66 lines (54 loc) · 1.62 KB
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
* install itself
IF !SYS(16) $ SET("Procedure")
SET PROCEDURE TO SYS(16) ADDITIVE
ENDIF
DEFINE CLASS XMLService AS Custom
_memberdata = '<VFPData>' + ;
'<memberdata name="encode" type="method" display="Encode"/>' + ;
'<memberdata name="loaddocument" type="method" display="LoadDocument"/>' + ;
'<memberdata name="selectnodes" type="method" display="SelectNodes"/>' + ;
'</VFPData>'
XMLParser = .NULL.
PROCEDURE Init as Boolean
LOCAL llResult as Boolean
TRY
This.XMLParser = CREATEOBJECT("MSXML2.DOMDocument.6.0")
m.llResult = .T.
CATCH
m.llResult = .F.
ENDTRY
RETURN m.llResult
ENDPROC
PROCEDURE Destroy
This.XMLParser = .NULL.
ENDPROC
FUNCTION LoadDocument AS Boolean
LPARAMETERS tcDocument
LOCAL llResult as Boolean
TRY
This.XMLParser.async = .F.
m.llResult = This.XMLParser.LoadXML(m.tcDocument) OR This.XMLParser.Load(m.tcDocument)
CATCH
m.llResult = .F.
ENDTRY
RETURN m.llResult
ENDFUNC
FUNCTION SelectNodes AS MSXML2.IXMLDOMNodeList
LPARAMETERS toTree AS MSXML2.IXMLDOMElement, tcPath as String
IF !ISNULL(m.toTree)
RETURN m.toTree.selectNodes(m.tcPath)
ELSE
RETURN This.XMLParser.selectNodes(m.tcPath)
ENDIF
ENDFUNC
FUNCTION Encode AS String
LPARAMETERS Source AS String, CData AS Boolean
LOCAL Encoded AS String
IF PCOUNT() = 2 AND m.CData
m.Encoded = "<![CDATA[" + STRTRAN(m.Source,"]]>","]]]]>&" + "gt;<![CDATA[") + "]]>"
ELSE
m.Encoded = STRTRAN(STRTRAN(STRTRAN(STRTRAN(STRTRAN(m.Source,"&","&" + "amp;"),"'","&" + "apos;"),'"',"&" + "quot;"),">","&" + "gt;"),"<","&" + "lt;")
ENDIF
RETURN m.Encoded
ENDFUNC
ENDDEFINE