wie bereits angesprochen: hier ist der Code zu meiner PT_MSXML3-Lib.
Dieser kann somit als Include eingebunden werden.
Wichtig: Wenn der Code als Include verwendet wird, dann vor dem
ersten Aufruf einer Funktion unbedingt PT_MSXML3_Init() aufrufen. Nach
Aufruf der letzten Funktion ist PT_MSXML3_End() aufzurufen.
Wenn im Code eklatante Fehler entdeckt werden, so wäre es schön, wenn
man mich darauf hinweisen würde, damit ich diesen dann hier korrigieren
kann. Für konstruktive Kritik bin ich natürlich offen.
Edit: Hier ist die gezippte Version des Codes herunterladbar: http://www.b-4-b.de/pt_msxml3_src.zip
Grüße ... Kiffi
Code: Alles auswählen
;- Interface definitions
Interface myIXMLDOMNode Extends IDispatch
get_nodeName(a.l) ;
get_nodeValue(a.l) ;
put_nodeValue(a.l) ;
get_nodeType(a.l) ;
get_parentNode(a.l) ;
get_childNodes(a.l) ;
get_firstChild(a.l) ;
get_lastChild(a.l) ;
get_previousSibling(a.l) ;
get_nextSibling(a.l) ;
get_attributes(a.l) ;
; insertBefore(a.l,b.l,c.l) ;
insertBefore(a.l,b.l,c.l,d.l,e.l,f.l) ;
replaceChild(a.l,b.l,c.l) ;
removeChild(a.l,b.l) ;
appendChild(a.l,b.l) ;
hasChildNodes(a.l) ;
get_ownerDocument(a.l) ;
cloneNode(a.l,b.l) ;
get_nodeTypeString(a.l) ;
get_text(a.l) ;
put_text(a.l) ;
get_specified(a.l) ;
get_definition(a.l) ;
get_nodeTypedValue(a.l) ;
put_nodeTypedValue(a.l) ;
get_dataType(a.l) ;
put_dataType(a.l) ;
get_xml(a.l) ;
transformNode(a.l,b.l) ;
selectNodes(a.l,b.l) ;
selectSingleNode(a.l,b.l) ;
get_parsed(a.l) ;
get_namespaceURI(a.l) ;
get_prefix(a.l) ;
get_baseName(a.l) ;
transformNodeToObject(a.l,b.l) ;
EndInterface
Interface myIXMLDOMNodeList Extends IDispatch
get_item(a.l,b.l) ;
get_length(a.l) ;
nextNode(a.l) ;
reset() ;
get__newEnum(a.l) ;
EndInterface
Interface myIXMLDOMDocument Extends myIXMLDOMNode
get_doctype(a.l) ;
get_implementation(a.l) ;
get_documentElement(a.l) ;
put_documentElement(a.l) ;
createElement(a.l,b.l) ;
createDocumentFragment(a.l) ;
createTextNode(a.l,b.l) ;
createComment(a.l,b.l) ;
createCDATASection(a.l,b.l) ;
createProcessingInstruction(a.l,b.l,c.l) ;
createAttribute(a.l,b.l) ;
createEntityReference(a.l,b.l) ;
getElementsByTagName(a.l,b.l) ;
createNode(a.l,b.l,c.l,d.l,e.l,f.l,g.l) ;
;createNode(a.l,b.l,c.l,d.l) ;
nodeFromID(a.l,b.l) ;
load(a.l,a.l,a.l,a.l,b.l) ; I changed this method to pass a VARIANT to it
get_readyState(a.l) ;
get_parseError(a.l) ;
get_url(a.l) ;
get_async(a.l) ;
put_async(a.l) ;
abort() ;
loadXML(a.l, b.l) ;
save(a.l,a.l,a.l,a.l) ; I changed this method to pass a VARIANT to it
get_validateOnParse(a.l) ;
put_validateOnParse(a.l) ;
get_resolveExternals(a.l) ;
put_resolveExternals(a.l) ;
get_preserveWhiteSpace(a.l) ;
put_preserveWhiteSpace(a.l) ;
put_onreadystatechange(a.l) ;
put_ondataavailable(a.l) ;
put_ontransformnode(a.l) ;
EndInterface
Interface myIXMLDOMParseError Extends IDispatch
get_errorCode(a.l) ;
get_url(a.l) ;
get_reason(a.l) ;
get_srcText(a.l) ;
get_line(a.l) ;
get_linepos(a.l) ;
get_filepos(a.l) ;
EndInterface
Interface myIXMLDOMNamedNodeMap Extends IDispatch
getNamedItem(a,b)
setNamedItem(a,b)
removeNamedItem(a,b)
get_item(a,b)
get_length(a)
getQualifiedItem(a,b,c)
removeQualifiedItem(a,b,c)
nextNode(a)
reset()
get__newEnum(a)
EndInterface
Interface myIXMLDOMAttribute Extends myIXMLDOMNode
get_name(a)
get_value(a)
put_value(a,b,c,d)
EndInterface
;#VT_I4.w = 3
;#VT_DISPATCH.w = 9
#VT_I4 = 3
#VT_DISPATCH = 9
; Konstanten für CreateNode
#NODE_ELEMENT = 1
#NODE_ATTRIBUTE = 2
#NODE_TEXT = 3
#NODE_CDATA_SECTION = 4
#NODE_ENTITY_REFERENCE = 5
#NODE_ENTITY = 6
#NODE_PROCESSING_INSTRUCTION = 7
#NODE_COMMENT = 8
#NODE_DOCUMENT = 9
#NODE_DOCUMENT_TYPE = 10
#NODE_DOCUMENT_FRAGMENT = 11
#NODE_NOTATION = 12
Global I_IXMLDOMNode.myIXMLDOMNode
Global I_IXMLDOMNodeList.myIXMLDOMNodeList
Global I_IXMLDOMDocument.myIXMLDOMDocument
Global I_IXMLDOMAttribute.myIXMLDOMAttribute
Global I_IXMLDOMAttributes.myIXMLDOMNamedNodeMap
Global I_IXMLDOMDocument_XSL.myIXMLDOMDocument
Global O_IXMLDOMNode.myIXMLDOMNode
Global O_IXMLDOMNodeList.myIXMLDOMNodeList
Global O_IXMLDOMDocument.myIXMLDOMDocument
Global O_IXMLDOMAttribute.myIXMLDOMAttribute
Global O_IXMLDOMAttributes.myIXMLDOMNamedNodeMap
Global O_IXMLDOMParseError.myIXMLDOMParseError
Global LastMessage$
Global ReturnString$
ProcedureDLL PT_MSXML3_Init()
; Do some initializing stuff, allocate memory, etc.
CoInitialize_(0)
EndProcedure
ProcedureDLL PT_MSXML3_End()
; Do some cleaning, free memory, unload third party DLLs, etc.
CoUninitialize_()
EndProcedure
Procedure.s PT_MSXML3_Uni2Ansi(unicodestr.l)
lenA = WideCharToMultiByte_(#CP_ACP, 0, unicodestr, -1, 0, 0, 0, 0);
ansistr.s = Space(lenA)
If (lenA > 0)
WideCharToMultiByte_(#CP_ACP, 0, unicodestr, -1, @ansistr, lenA, 0, 0);
EndIf
ProcedureReturn ansistr
EndProcedure
Procedure.l PT_MSXML3_Ansi2Uni(ansistr.s)
lenA.l = Len(ansistr)
lenW = MultiByteToWideChar_(#CP_ACP, 0, ansistr, lenA, 0, 0)
If (lenW > 0) ; Check whether conversion was successful
unicodestr = SysAllocStringLen_(0, lenW)
MultiByteToWideChar_(#CP_ACP, 0, ansistr, lenA, unicodestr, lenW)
result = unicodestr
SysFreeString_(unicodestr)
ProcedureReturn result
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure.s PT_MSXML3_GetHResultMessage(HResult.l)
;Converts a COM HResult value into a more meaningful message.
;Params: HResult.l A HResult value return from a COM call
Message.s = ""
Select HResult
Case #S_OK
Message = "OK"
Case #CLASS_E_CLASSNOTAVAILABLE
Message = "Class Not Available"
Case #E_NOINTERFACE
Message = "No Interface"
Case #CO_E_NOTINITIALIZED
Message = "CO_E_NOTINITIALIZED"
Case #CO_E_ALREADYINITIALIZED
Message = "CO_E_ALREADYINITIALIZED"
Case #CO_E_CANTDETERMINECLASS
Message = "CO_E_CANTDETERMINECLASS"
Case #CO_E_CLASSSTRING
Message = "The registered CLSID for the ProgID is invalid"
Case #CO_E_IIDSTRING
Message = "CO_E_IIDSTRING"
Case #CO_E_APPNOTFOUND
Message = "CO_E_APPNOTFOUND"
Case #CO_E_APPSINGLEUSE
Message = "CO_E_APPSINGLEUSE"
Case #CO_E_ERRORINAPP
Message = "CO_E_ERRORINAPP"
Case #CO_E_DLLNOTFOUND
Message = "CO_E_DLLNOTFOUND"
Case #CO_E_ERRORINDLL
Message = "CO_E_ERRORINDLL"
Case #CO_E_WRONGOSFORAPP
Message = "CO_E_WRONGOSFORAPP"
Case #CO_E_OBJNOTREG
Message = "CO_E_OBJNOTREG"
Case #CO_E_OBJISREG
Message = "CO_E_OBJISREG"
Case #CO_E_OBJNOTCONNECTED
Message = "CO_E_OBJNOTCONNECTED"
Case #CO_E_APPDIDNTREG
Message = "CO_E_APPDIDNTREG"
Case #CO_E_RELEASED
Message = "CO_E_RELEASED"
Case #REGDB_E_WRITEREGDB
Message = "An error occurred writing the CLSID To the registry."
Case #E_OUTOFMEMORY
Message = "Out of memory."
Case #STG_E_INSUFFICIENTMEMORY
Message = "Out of memory."
Case #E_INVALIDARG
Message = "One or more of the arguments is invalid."
Case #DISP_E_UNKNOWNNAME
Message = "One Or more of the names could not be found."
Case #DISP_E_UNKNOWNLCID
Message = "The locale identifier (LCID) could not be found in the OLE DLLs."
Default
Message = "Error Number: $" + Hex(HResult)
EndSelect
ProcedureReturn Message
EndProcedure
ProcedureDLL.l PT_MSXML3_CreateDomDocument()
HResult = CoCreateInstance_(?CLSID_XMLDOM, 0, 1, ?IID_IXMLDOMDocument, @xDoc)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn xDoc
EndProcedure
ProcedureDLL PT_MSXML3_ReleaseObject(oPtr)
If oPtr = 0 : ProcedureReturn #False : EndIf
myIUnknown.IUnknown
myIUnknown = oPtr
HResult = myIUnknown\Release()
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
EndProcedure
ProcedureDLL.l PT_MSXML3_GetDocumentElement(XMLDOMDocument) ; Returns the root element of the document.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\get_documentElement(@O_IXMLDOMNode)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMNode
EndProcedure
ProcedureDLL.l PT_MSXML3_CreateElement(XMLDOMDocument,sElementName.s) ; Creates an element node using the specified name.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
If sElementName = "" : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\createElement(PT_MSXML3_Ansi2Uni(sElementName), @O_IXMLDOMNode)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMNode
EndProcedure
ProcedureDLL.l PT_MSXML3_CreateTextNode(XMLDOMDocument, sTextNodeText.s) ; Creates a text node that contains the supplied data.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
If sTextNodeText = "" : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\createTextNode(PT_MSXML3_Ansi2Uni(sTextNodeText), @O_IXMLDOMNode)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMNode
EndProcedure
ProcedureDLL.l PT_MSXML3_CreateComment(XMLDOMDocument, sCommentText.s) ; Creates a comment node that contains the supplied data.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
If sCommentText = "" : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\createComment(PT_MSXML3_Ansi2Uni(sCommentText), @O_IXMLDOMNode)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMNode
EndProcedure
ProcedureDLL.l PT_MSXML3_CreateCDATASection(XMLDOMDocument, sCDATAText.s) ; Creates a CDATA section node that contains the supplied data.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
If sCDATAText = "" : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\createCDATASection(PT_MSXML3_Ansi2Uni(sCDATAText), @O_IXMLDOMNode)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMNode
EndProcedure
ProcedureDLL.l PT_MSXML3_CreateAttribute(XMLDOMDocument, sAttributeName.s) ; Creates a new attribute with the specified name.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
If sAttributeName = "" : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\createAttribute(PT_MSXML3_Ansi2Uni(sAttributeName), @O_IXMLDOMAttribute)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMAttribute
EndProcedure
ProcedureDLL.l PT_MSXML3_GetElementsByTagName(XMLDOMDocument, sTagName.s) ; Returns a collection of elements that have the specified name
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
If sTagName = "" : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\getElementsByTagName(PT_MSXML3_Ansi2Uni(sTagName), @O_IXMLDOMNodeList)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMNodeList
EndProcedure
; ProcedureDLL.l PT_MSXML3_CreateNodeByNodeTypeString(XMLDOMDocument, sType.s, sName.s, sNameSpace.s) ; Creates a node using the supplied type, name, and namespace.
;
; If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
;
; I_IXMLDOMDocument = XMLDOMDocument
;
; VariantValue.VARIANT
; VariantValue\vt = #VT_BSTR
; VariantValue\bstrVal = PT_MSXML3_Ansi2Uni(sType)
; *V1.pToVariant = VariantValue
;
; HResult = I_IXMLDOMDocument\createNode(*V1\a,*V1\b,*V1\c,*V1\d, PT_MSXML3_Ansi2Uni(sName), PT_MSXML3_Ansi2Uni(sNameSpace), @O_IXMLDOMNode)
;
; ;HResult = I_IXMLDOMDocument\createNode(VariantValue, PT_MSXML3_Ansi2Uni(sName), PT_MSXML3_Ansi2Uni(sNameSpace), @O_IXMLDOMNode)
;
; LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
;
; If HResult <> #S_OK : ProcedureReturn #False : EndIf
;
; ProcedureReturn O_IXMLDOMNode
;
; EndProcedure
;
; ProcedureDLL.l PT_MSXML3_CreateNodeByNodeTypeValue(XMLDOMDocument, lType.l, sName.s, sNameSpace.s) ; Creates a node using the supplied type, name, and namespace.
;
;
; EndProcedure
ProcedureDLL.l PT_MSXML3_NodeFromID(XMLDOMDocument, sID.s) ; Returns the node that matches the ID attribute.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
If sID = "" : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\nodeFromID(PT_MSXML3_Ansi2Uni(sID), @O_IXMLDOMNode)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMNode
EndProcedure
ProcedureDLL.l PT_MSXML3_Load(XMLDOMDocument, sXMLFile.s) ; Loads an XML document from the specified location.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
If sXMLFile = "" : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
VariantValue.VARIANT
VariantValue\vt = #VT_BSTR
VariantValue\bstrVal = PT_MSXML3_Ansi2Uni(sXMLFile)
*V1.pToVariant = VariantValue
HResult = I_IXMLDOMDocument\load(*V1\a,*V1\b,*V1\c,*V1\d,@ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn #True
EndProcedure
ProcedureDLL.l PT_MSXML3_LoadXML(XMLDOMDocument, sXMLString.s) ; Loads an XML document using the supplied string.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
If sXMLString = "" : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\loadXML(PT_MSXML3_Ansi2Uni(sXMLString), @ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn #True
EndProcedure
ProcedureDLL.l PT_MSXML3_GetReadyState(XMLDOMDocument) ; Indicates the current state of the XML document.
; LOADING (1) The load is in progress. Reading persisted properties, but not yet parsing Data. For readyState definitions, Data should be considered equivalent To binary large object (BLOB) properties.
; LOADED (2) Reading of The persisted properties completed. Reading And parsing Data, but The object model is not yet available.
; INTERACTIVE (3) Some Data has been Read And parsed, And The object model is now available on The partially retrieved Data set. Although The object model is available during this state, it is Read-only.
; COMPLETED (4) The document has been completely loaded, successfully Or unsuccessfully.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\get_readyState(@ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn ReturnValue
EndProcedure
ProcedureDLL.s PT_MSXML3_GetUrl(XMLDOMDocument) ; Returns the URL for the last loaded XML document.
If XMLDOMDocument = 0 : ProcedureReturn "" : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\get_url(@ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn "" : EndIf
ReturnString$ = PT_MSXML3_Uni2Ansi(ReturnValue)
ProcedureReturn ReturnString$
EndProcedure
ProcedureDLL.l PT_MSXML3_GetAsync(XMLDOMDocument) ; Specifies if asynchronous download is permitted.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\get_async(@ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn "" : EndIf
ProcedureReturn ReturnValue
EndProcedure
ProcedureDLL PT_MSXML3_PutAsync(XMLDOMDocument, lAsyncState.l) ; Specifies if asynchronous download is permitted.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\put_async(lAsyncState)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
EndProcedure
ProcedureDLL.l PT_MSXML3_Abort(XMLDOMDocument) ; Aborts an asynchronous download in progress.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\abort()
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
EndProcedure
ProcedureDLL.l PT_MSXML3_GetValidateOnParse(XMLDOMDocument) ; Indicates whether the parser should validate this document.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\get_validateOnParse(@ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn ReturnValue
EndProcedure
ProcedureDLL PT_MSXML3_PutValidateOnParse(XMLDOMDocument, lValidate.l) ; Indicates whether the parser should validate this document.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\put_validateOnParse(lValidate)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
EndProcedure
ProcedureDLL.l PT_MSXML3_GetResolveExternals(XMLDOMDocument) ; Indicates whether external definitions, resolvable namespaces, document type definition (DTD) external subsets, and external entity references, are to be resolved at parse time, independent of validation.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\get_resolveExternals(@ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn ReturnValue
EndProcedure
ProcedureDLL PT_MSXML3_PutResolveExternals(XMLDOMDocument, lResolveExternals.l) ; ; Indicates whether external definitions, resolvable namespaces, document type definition (DTD) external subsets, and external entity references, are to be resolved at parse time, independent of validation.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\put_resolveExternals(lResolveExternals)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
EndProcedure
ProcedureDLL.l PT_MSXML3_GetPreserveWhiteSpace(XMLDOMDocument) ; Specifies the default white space handling.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\get_preserveWhiteSpace(@ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn ReturnValue
EndProcedure
ProcedureDLL PT_MSXML3_PutPreserveWhiteSpace(XMLDOMDocument, lPreserveWhiteSpace.l) ; Specifies the default white space handling.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\put_preserveWhiteSpace(lPreserveWhiteSpace)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
EndProcedure
ProcedureDLL.s PT_MSXML3_GetNodeName(XMLDOMNode) ; Returns the qualified name for attribute, document type, element, entity, or notation nodes. Returns a fixed string for all other node types. Read-only.
If XMLDOMNode = 0 : ProcedureReturn "" : EndIf
I_IXMLDOMNode = XMLDOMNode
HResult = I_IXMLDOMNode\get_nodeName(@ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn "" : EndIf
ReturnString$ = PT_MSXML3_Uni2Ansi(ReturnValue)
ProcedureReturn ReturnString$
EndProcedure
ProcedureDLL.l PT_MSXML3_GetNodeType(XMLDOMDocument) ; Specifies the XML Document Object Model (DOM) node type, which determines valid values and whether the node can have child nodes.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\get_nodeType(@ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn ReturnValue
EndProcedure
ProcedureDLL.s PT_MSXML3_GetNodeTypeString(XMLDOMDocument) ; Returns the node type in string form.
If XMLDOMDocument = 0 : ProcedureReturn "" : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\get_nodeTypeString(@ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn "" : EndIf
ReturnString$ = PT_MSXML3_Uni2Ansi(ReturnValue)
ProcedureReturn ReturnString$
EndProcedure
ProcedureDLL.l PT_MSXML3_GetParentNode(XMLDOMNode) ; Contains the parent node.
If XMLDOMNode = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMNode = XMLDOMNode
HResult = I_IXMLDOMNode\get_parentNode(@O_IXMLDOMNode)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMNode
EndProcedure
ProcedureDLL.l PT_MSXML3_GetChildNodes(XMLDOMNode) ; Contains a node list containing the children nodes.
If XMLDOMNode = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMNode = XMLDOMNode
HResult = I_IXMLDOMNode\get_childNodes(@O_IXMLDOMNodeList)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMNodeList
EndProcedure
ProcedureDLL.l PT_MSXML3_GetFirstChild(XMLDOMNode) ; Contains the first child of the node.
If XMLDOMNode = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMNode = XMLDOMNode
HResult = I_IXMLDOMNode\get_firstChild(@O_IXMLDOMNode)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMNode
EndProcedure
ProcedureDLL.l PT_MSXML3_GetLastChild(XMLDOMNode) ; Returns the last child node.
If XMLDOMNode = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMNode = XMLDOMNode
HResult = I_IXMLDOMNode\get_lastChild(@O_IXMLDOMNode)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMNode
EndProcedure
ProcedureDLL.l PT_MSXML3_GetPreviousSibling(XMLDOMNode) ; Contains the previous sibling of the node in the parent's child list.
If XMLDOMNode = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMNode = XMLDOMNode
HResult = I_IXMLDOMNode\get_previousSibling(@O_IXMLDOMNode)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMNode
EndProcedure
ProcedureDLL.l PT_MSXML3_GetNextSibling(XMLDOMNode) ; Contains the next sibling of the node in the parent's child list.
If XMLDOMNode = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMNode = XMLDOMNode
HResult = I_IXMLDOMNode\get_nextSibling(@O_IXMLDOMNode)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMNode
EndProcedure
ProcedureDLL.l PT_MSXML3_InsertBefore(XMLDOMNode_Parent, XMLDOMNode_New, XMLDOMNode_Ref) ; Inserts a child node to the left of the specified node or at the end of the list.
If XMLDOMNode_Parent = 0 : ProcedureReturn #False : EndIf
If XMLDOMNode_New = 0 : ProcedureReturn #False : EndIf
If XMLDOMNode_Ref = 0 : ProcedureReturn #False : EndIf
m_p_ParentNode.myIXMLDOMNode
m_p_ParentNode = XMLDOMNode_Parent
m_p_NewNode.myIXMLDOMNode
m_p_NewNode = XMLDOMNode_New
m_p_RefNode.myIXMLDOMNode
m_p_RefNode = XMLDOMNode_Ref
VariantValue.VARIANT
VariantValue\vt = #VT_DISPATCH
VariantValue\bstrVal = m_p_RefNode
*V1.pToVariant = VariantValue
HResult = m_p_ParentNode\insertBefore(m_p_NewNode,*V1\a,*V1\b,*V1\c,*V1\d,@ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn #True
EndProcedure
ProcedureDLL.l PT_MSXML3_ReplaceChild(XMLDOMNode_Parent, XMLDOMNode_Old, XMLDOMNode_New) ; Replaces the specified old child node with the supplied new child node.
If XMLDOMNode_Parent = 0 : ProcedureReturn #False : EndIf
If XMLDOMNode_Old = 0 : ProcedureReturn #False : EndIf
If XMLDOMNode_New = 0 : ProcedureReturn #False : EndIf
m_p_ParentNode.myIXMLDOMNode
m_p_ParentNode = XMLDOMNode_Parent
m_p_OldNode.myIXMLDOMNode
m_p_OldNode = XMLDOMNode_Old
m_p_NewNode.myIXMLDOMNode
m_p_NewNode = XMLDOMNode_New
HResult = m_p_ParentNode\replaceChild(m_p_OldNode, m_p_NewNode, @ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn #True
EndProcedure
ProcedureDLL.l PT_MSXML3_RemoveChild(XMLDOMNode_Parent, XMLDOMNode_Child) ; Removes the specified child node from the list of children.
If XMLDOMNode_Parent = 0 : ProcedureReturn #False : EndIf
If XMLDOMNode_Child = 0 : ProcedureReturn #False : EndIf
m_p_ParentNode.myIXMLDOMNode
m_p_ParentNode = XMLDOMNode_Parent
m_p_ChildNode.myIXMLDOMNode
m_p_ChildNode = XMLDOMNode_Child
HResult = m_p_ParentNode\removeChild(m_p_ChildNode,@ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn #True
EndProcedure
ProcedureDLL.l PT_MSXML3_AppendChild(XMLDOMNode_Parent, XMLDOMNode_Child) ; Appends a new child node as the last child of the node.
If XMLDOMNode_Parent = 0 : ProcedureReturn #False : EndIf
If XMLDOMNode_Child = 0 : ProcedureReturn #False : EndIf
m_p_ParentNode.myIXMLDOMNode
m_p_ParentNode = XMLDOMNode_Parent
m_p_ChildNode.myIXMLDOMNode
m_p_ChildNode = XMLDOMNode_Child
HResult = m_p_ParentNode\appendChild(m_p_ChildNode,@ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn #True
EndProcedure
ProcedureDLL.l PT_MSXML3_HasChildNodes(XMLDOMNode) ; Provides a fast way to determine whether a node has children.
If XMLDOMNode = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMNode = XMLDOMNode
HResult = I_IXMLDOMNode\hasChildNodes(@bReturnValue.b)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn bReturnValue
EndProcedure
ProcedureDLL.l PT_MSXML3_GetOwnerDocument(XMLDOMNode) ; Returns the root of the document that contains the node.
If XMLDOMNode = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMNode = XMLDOMNode
HResult = I_IXMLDOMNode\get_ownerDocument(@O_IXMLDOMDocument)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMDocument
EndProcedure
ProcedureDLL.l PT_MSXML3_CloneNode(XMLDOMNode, lDeep.l) ; Clones a new node
If XMLDOMNode = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMNode = XMLDOMNode
If lDeep <> #VARIANT_FALSE : lDeep = #VARIANT_TRUE : EndIf
HResult = I_IXMLDOMNode\cloneNode(lDeep, @O_IXMLDOMNode)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMNode
EndProcedure
ProcedureDLL.s PT_MSXML3_GetText(XMLDOMNode) ; Returns the text content of the node or the concatenated text representing the node and its descendants.
If XMLDOMNode = 0 : ProcedureReturn "" : EndIf
I_IXMLDOMNode = XMLDOMNode
HResult = I_IXMLDOMNode\get_text(@ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn "" : EndIf
ReturnString$ = PT_MSXML3_Uni2Ansi(ReturnValue)
ProcedureReturn ReturnString$
EndProcedure
ProcedureDLL PT_MSXML3_PutText(XMLDOMNode, sText.s) ; Specifies the text content of the node.
If XMLDOMNode = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMNode = XMLDOMNode
HResult = I_IXMLDOMNode\put_text(PT_MSXML3_Ansi2Uni(sText))
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
EndProcedure
ProcedureDLL.b PT_MSXML3_GetSpecified(XMLDOMNode) ; Indicates whether the node (usually an attribute) is explicitly specified or derived from a default value in the document type definition (DTD) or schema.
If XMLDOMNode = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMNode = XMLDOMNode
HResult = I_IXMLDOMNode\get_specified(@bReturnValue.b)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn bReturnValue
EndProcedure
ProcedureDLL.l PT_MSXML3_GetDefinition(XMLDOMNode) ; Returns the definition of the node in the document type definition (DTD) or schema.
If XMLDOMNode = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMNode = XMLDOMNode
HResult = I_IXMLDOMNode\get_definition(@O_IXMLDOMNode)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMNode
EndProcedure
ProcedureDLL.l PT_MSXML3_GetNodeTypedValue(XMLDOMNode) ; Returns the node value expressed in its defined data type.
If XMLDOMNode = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMNode = XMLDOMNode
HResult = I_IXMLDOMNode\get_nodeTypedValue(@ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn ReturnValue
EndProcedure
ProcedureDLL PT_MSXML3_PutNodeTypedValue(XMLDOMNode, lNodeTypedValue.l) ; Specifies the node value expressed in its defined data type.
If XMLDOMNode = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMNode = XMLDOMNode
HResult = I_IXMLDOMNode\put_nodeTypedValue(lNodeTypedValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
EndProcedure
ProcedureDLL.l PT_MSXML3_GetDataType(XMLDOMNode) ; Returns the data type for this node. This property applies to document type definitions (DTDs) only, not to XML-Data Reduced (XDR) schemas or XML Schema definition language (XSD) schemas.
If XMLDOMNode = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMNode = XMLDOMNode
HResult = I_IXMLDOMNode\get_dataType(@ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn ReturnValue
EndProcedure
ProcedureDLL PT_MSXML3_PutDataType(XMLDOMNode, lDataType.l) ; Specifies the data type for this node. This property applies to document type definitions (DTDs) only, not to XML-Data Reduced (XDR) schemas or XML Schema definition language (XSD) schemas.
If XMLDOMNode = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMNode = XMLDOMNode
HResult = I_IXMLDOMNode\put_dataType(lDataType)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
EndProcedure
ProcedureDLL.s PT_MSXML3_GetXml(XMLDOMDocument) ; Contains the XML representation of the node and all its descendants.
If XMLDOMDocument = 0 : ProcedureReturn "" : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\get_xml(@ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn "" : EndIf
ReturnString$ = PT_MSXML3_Uni2Ansi(ReturnValue)
ProcedureReturn ReturnString$
EndProcedure
ProcedureDLL.l PT_MSXML3_SelectNodes(XMLDOMDocument, sXPath.s) ; Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as NodeList.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
If sXPath = "" : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\selectNodes(PT_MSXML3_Ansi2Uni(sXPath), @O_IXMLDOMNodeList)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMNodeList
EndProcedure
ProcedureDLL.l PT_MSXML3_SelectSingleNode(XMLDOMDocument, sXPath.s) ; Applies the specified pattern-matching operation to this node's context and returns the first matching node.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
If sXPath = "" : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
HResult = I_IXMLDOMDocument\selectSingleNode(PT_MSXML3_Ansi2Uni(sXPath), @O_IXMLDOMNode)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMNode
EndProcedure
ProcedureDLL.s PT_MSXML3_GetPrefix(XMLDOMNode) ; Returns the namespace prefix.
If XMLDOMNode = 0 : ProcedureReturn "" : EndIf
I_IXMLDOMNode = XMLDOMNode
HResult = I_IXMLDOMNode\get_prefix(@ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn "" : EndIf
ReturnString$ = PT_MSXML3_Uni2Ansi(ReturnValue)
ProcedureReturn ReturnString$
EndProcedure
ProcedureDLL.s PT_MSXML3_GetBaseName(XMLDOMNode) ; Returns the base name for the name qualified with the namespace.
If XMLDOMNode = 0 : ProcedureReturn "" : EndIf
I_IXMLDOMNode = XMLDOMNode
HResult = I_IXMLDOMNode\get_baseName(@ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn "" : EndIf
ReturnString$ = PT_MSXML3_Uni2Ansi(ReturnValue)
ProcedureReturn ReturnString$
EndProcedure
ProcedureDLL.s PT_MSXML3_TransformNode(XMLDOMDocument_XML,XMLDOMDocument_XSL)
If XMLDOMDocument_XML = 0 : ProcedureReturn "" : EndIf
If XMLDOMDocument_XSL = 0 : ProcedureReturn "" : EndIf
I_IXMLDOMDocument = XMLDOMDocument_XML
I_IXMLDOMDocument_XSL = XMLDOMDocument_XSL
HResult = I_IXMLDOMDocument\transformNode(I_IXMLDOMDocument_XSL, @ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn "" : EndIf
ReturnString$ = PT_MSXML3_Uni2Ansi(ReturnValue)
ProcedureReturn ReturnString$
EndProcedure
ProcedureDLL.l PT_MSXML3_Save(XMLDOMDocument, sXMLFile.s) ; Saves an XML document to the specified location.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
If sXMLFile = "" : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
VariantValue.VARIANT
VariantValue\vt = #VT_BSTR
VariantValue\bstrVal = PT_MSXML3_Ansi2Uni(sXMLFile)
*V1.pToVariant = VariantValue
HResult = I_IXMLDOMDocument\save(*V1\a, *V1\b, *V1\c, *V1\d)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn #True
EndProcedure
;- Nodelist
ProcedureDLL.l PT_MSXML3_NodeListGetItem(XMLDOMNodeList, lPosition.l) ; Allows random access to individual nodes within the collection. Zerobased.
If XMLDOMNodeList = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMNodeList = XMLDOMNodeList
HResult = I_IXMLDOMNodeList\get_item(lPosition, @O_IXMLDOMNode)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMNode
EndProcedure
ProcedureDLL.l PT_MSXML3_NodeListGetLength(XMLDOMNodeList) ; Indicates the number of items in the collection.
If XMLDOMNodeList = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMNodeList = XMLDOMNodeList
HResult = I_IXMLDOMNodeList\get_length(@ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn ReturnValue
EndProcedure
ProcedureDLL.l PT_MSXML3_NodeListNextNode(XMLDOMNodeList) ; Returns the next node in the collection.
If XMLDOMNodeList = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMNodeList = XMLDOMNodeList
HResult = I_IXMLDOMNodeList\nextNode(@O_IXMLDOMNode)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMNode
EndProcedure
ProcedureDLL PT_MSXML3_NodeListReset(XMLDOMNodeList) ; Resets the iterator.
If XMLDOMNodeList = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMNodeList = XMLDOMNodeList
HResult = I_IXMLDOMNodeList\reset()
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
EndProcedure
;- Attributes
ProcedureDLL.l PT_MSXML3_GetAttributes(XMLDOMNode) ; Contains the list of attributes for this node.
If XMLDOMNode = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMNode = XMLDOMNode
HResult = I_IXMLDOMNode\get_attributes(@O_IXMLDOMAttributes)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMAttributes
EndProcedure
ProcedureDLL.l PT_MSXML3_AttributesGetLength(XMLDOMAttributes) ; Indicates the number of items in the collection.
If XMLDOMAttributes = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMAttributes = XMLDOMAttributes
HResult = I_IXMLDOMAttributes\get_length(@ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn ReturnValue
EndProcedure
ProcedureDLL.l PT_MSXML3_AttributesGetItem(XMLDOMAttributes, lPosition.l) ; Allows random access to individual nodes within the collection. Zerobased.
If XMLDOMAttributes = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMAttributes = XMLDOMAttributes
HResult = I_IXMLDOMAttributes\get_item(lPosition, @O_IXMLDOMAttribute)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMAttribute
EndProcedure
ProcedureDLL.l PT_MSXML3_AttributesSetNamedItem(XMLDOMAttributes, XMLDOMAttribute) ; Adds the supplied node to the collection.
If XMLDOMAttributes = 0 : ProcedureReturn #False : EndIf
If XMLDOMAttribute = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMAttributes = XMLDOMAttributes
HResult = I_IXMLDOMAttributes\setNamedItem(XMLDOMAttribute, @ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
EndProcedure
ProcedureDLL.l PT_MSXML3_AttributesGetNamedItem(XMLDOMAttributes, sAttributeName.s) ; Returns the named Attribute
If XMLDOMAttributes = 0 : ProcedureReturn #False : EndIf
If sAttributeName = "" : ProcedureReturn #False : EndIf
I_IXMLDOMAttributes = XMLDOMAttributes
HResult = I_IXMLDOMAttributes\getNamedItem(PT_MSXML3_Ansi2Uni(sAttributeName), @O_IXMLDOMAttribute)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn #False : EndIf
ProcedureReturn O_IXMLDOMAttribute
EndProcedure
ProcedureDLL.s PT_MSXML3_AttributesGetText(XMLDOMAttribute) ; Returns the attribute value.
If XMLDOMAttribute = 0 : ProcedureReturn "" : EndIf
I_IXMLDOMAttribute = XMLDOMAttribute
HResult = I_IXMLDOMAttribute\get_text(@ReturnValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn "" : EndIf
ReturnString$ = PT_MSXML3_Uni2Ansi(ReturnValue)
ProcedureReturn ReturnString$
EndProcedure
ProcedureDLL.s PT_MSXML3_AttributesGetName(XMLDOMAttribute) ; Returns the attribute name.
If XMLDOMAttribute = 0 : ProcedureReturn "" : EndIf
I_IXMLDOMAttribute = XMLDOMAttribute
VariantValue.VARIANT
VariantValue\vt = #VT_BSTR
HResult = I_IXMLDOMAttribute\get_name(@VariantValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
If HResult <> #S_OK : ProcedureReturn "" : EndIf
ReturnString$ = PT_MSXML3_Uni2Ansi(VariantValue\bstrVal)
ProcedureReturn ReturnString$
EndProcedure
ProcedureDLL PT_MSXML3_AttributesPutValue(XMLDOMAttribute, sAttributeValue.s) ; Specifies the attribute value.
If XMLDOMAttribute = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMAttribute = XMLDOMAttribute
VariantValue.VARIANT
VariantValue\vt = #VT_BSTR
VariantValue\bstrVal = PT_MSXML3_Ansi2Uni(sAttributeValue)
*V1.pToVariant = VariantValue
HResult = I_IXMLDOMAttribute\put_value(*V1\a,*V1\b,*V1\c,*V1\d)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
EndProcedure
ProcedureDLL.s PT_MSXML3_AttributesGetValue(XMLDOMAttribute) ; Returns the attribute value.
If XMLDOMAttribute = 0 : ProcedureReturn "" : EndIf
I_IXMLDOMAttribute = XMLDOMAttribute
VariantValue.VARIANT
VariantValue\vt = #VT_BSTR
HResult = I_IXMLDOMAttribute\get_value(@VariantValue)
LastMessage$ = PT_MSXML3_GetHResultMessage(HResult)
Debug LastMessage$
CallDebugger
If HResult <> #S_OK : ProcedureReturn "" : EndIf
ReturnString$ = PT_MSXML3_Uni2Ansi(VariantValue\bstrVal)
ProcedureReturn ReturnString$
EndProcedure
;- ParseError
ProcedureDLL.s PT_MSXML3_GetParseErrorReason(XMLDOMDocument) ; Describes the reason for the error.
If XMLDOMDocument = 0 : ProcedureReturn "" : EndIf
I_IXMLDOMDocument = XMLDOMDocument
I_IXMLDOMDocument\get_parseError(@O_IXMLDOMParseError)
O_IXMLDOMParseError\get_reason(@ReturnValue)
ReturnString$ = PT_MSXML3_Uni2Ansi(ReturnValue)
O_IXMLDOMParseError\Release()
ProcedureReturn ReturnString$
EndProcedure
ProcedureDLL.l PT_MSXML3_GetParseErrorErrorcode(XMLDOMDocument) ; Contains the error code of the last parse error.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
I_IXMLDOMDocument\get_parseError(@O_IXMLDOMParseError)
O_IXMLDOMParseError\get_errorCode(@ReturnValue)
O_IXMLDOMParseError\Release()
ProcedureReturn ReturnValue
EndProcedure
ProcedureDLL.s PT_MSXML3_GetParseErrorSrctext(XMLDOMDocument) ; Returns the full text of the line containing the error.
If XMLDOMDocument = 0 : ProcedureReturn "" : EndIf
I_IXMLDOMDocument = XMLDOMDocument
I_IXMLDOMDocument\get_parseError(@O_IXMLDOMParseError)
O_IXMLDOMParseError\get_srcText(@ReturnValue)
ReturnString$ = PT_MSXML3_Uni2Ansi(ReturnValue)
O_IXMLDOMParseError\Release()
ProcedureReturn ReturnString$
EndProcedure
ProcedureDLL.l PT_MSXML3_GetParseErrorLine(XMLDOMDocument) ; Specifies the line number that contains the error.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
I_IXMLDOMDocument\get_parseError(@O_IXMLDOMParseError)
O_IXMLDOMParseError\get_line(@ReturnValue)
O_IXMLDOMParseError\Release()
ProcedureReturn ReturnValue
EndProcedure
ProcedureDLL.l PT_MSXML3_GetParseErrorLinepos(XMLDOMDocument) ; Contains the character position within the line where the error occurred.
If XMLDOMDocument = 0 : ProcedureReturn #False : EndIf
I_IXMLDOMDocument = XMLDOMDocument
I_IXMLDOMDocument\get_parseError(@O_IXMLDOMParseError)
O_IXMLDOMParseError\get_linepos(@ReturnValue)
O_IXMLDOMParseError\Release()
ProcedureReturn ReturnValue
EndProcedure
;- Special-Section
ProcedureDLL.s PT_MSXML3_SpecialTransformFromStringsToString(sXMLString.s, sXSLString.s)
If sXMLString = "" : ProcedureReturn "" : EndIf
If sXSLString = "" : ProcedureReturn "" : EndIf
oXML.myIXMLDOMDocument = PT_MSXML3_CreateDomDocument()
If oXML
oXSL.myIXMLDOMDocument = PT_MSXML3_CreateDomDocument()
If oXSL
If PT_MSXML3_LoadXML(oXML,sXMLString)
If PT_MSXML3_LoadXML(oXSL,sXSLString)
ReturnString$ = PT_MSXML3_TransformNode(oXML,oXSL)
EndIf ; If PT_MSXML3_LoadXML(oXSL,sXSL)
EndIf ; If PT_MSXML3_LoadXML(oXML,sXML)
oXSL\Release()
EndIf ; If oXSL
oXML\Release()
EndIf ; If oXML
ProcedureReturn ReturnString$
EndProcedure
ProcedureDLL.s PT_MSXML3_SpecialTransformFromFilesToString(sXMLFile.s, sXSLFile.s)
If sXMLFile = "" : ProcedureReturn "" : EndIf
If sXSLFile = "" : ProcedureReturn "" : EndIf
oXML.myIXMLDOMDocument = PT_MSXML3_CreateDomDocument()
If oXML
oXSL.myIXMLDOMDocument = PT_MSXML3_CreateDomDocument()
If oXSL
If PT_MSXML3_Load(oXML,sXMLFile)
If PT_MSXML3_Load(oXSL,sXSLFile)
ReturnString$ = PT_MSXML3_TransformNode(oXML,oXSL)
EndIf ; If PT_MSXML3_LoadXML(oXSL,sXSL)
EndIf ; If PT_MSXML3_LoadXML(oXML,sXML)
oXSL\Release()
EndIf ; If oXSL
oXML\Release()
EndIf ; If oXML
ProcedureReturn ReturnString$
EndProcedure
ProcedureDLL.s PT_MSXML3_SpecialGetNamedAttributeValue(XMLDOMNode, sAttributeName.s)
If XMLDOMNode = 0 : ProcedureReturn "" : EndIf
If sAttributeName = "" : ProcedureReturn "" : EndIf
xNode.myIXMLDOMNode
I_IXMLDOMNode = XMLDOMNode
ReturnString$=""
If I_IXMLDOMNode\get_attributes(@O_IXMLDOMAttributes) = #S_OK
If O_IXMLDOMAttributes
If O_IXMLDOMAttributes\getNamedItem(PT_MSXML3_Ansi2Uni(sAttributeName), @xNode) = #S_OK
If xNode
xNode\get_text(@ReturnValue)
ReturnString$ = PT_MSXML3_Uni2Ansi(ReturnValue)
xNode\Release()
EndIf
EndIf
O_IXMLDOMAttributes\Release()
EndIf
EndIf
ProcedureReturn ReturnString$
EndProcedure
ProcedureDLL.l PT_MSXML3_SpecialSetNamedAttributeValue(XMLDOMDocument, XMLDOMNode, sAttributeName.s, sAttributeValue.s)
If XMLDOMNode = 0 : ProcedureReturn "" : EndIf
If sAttributeName = "" : ProcedureReturn "" : EndIf
I_IXMLDOMNode = XMLDOMNode
oAttributes = PT_MSXML3_GetAttributes(I_IXMLDOMNode)
If oAttributes
oAttribute = PT_MSXML3_AttributesGetNamedItem(oAttributes, sAttributeName)
If oAttribute = #False
oAttribute = PT_MSXML3_CreateAttribute(XMLDOMDocument, sAttributeName)
PT_MSXML3_AttributesSetNamedItem(oAttributes, oAttribute)
EndIf
PT_MSXML3_AttributesPutValue(oAttribute, sAttributeValue)
PT_MSXML3_ReleaseObject(oAttribute)
PT_MSXML3_ReleaseObject(oAttributes)
EndIf
EndProcedure
ProcedureDLL.l PT_MSXML3_SpecialGetNodeFromString(sXMLString.s)
I_IXMLDOMDocument = PT_MSXML3_CreateDomDocument()
PT_MSXML3_LoadXML(I_IXMLDOMDocument,sXMLString)
O_IXMLDOMNode = PT_MSXML3_SelectSingleNode(I_IXMLDOMDocument,"//")
I_IXMLDOMDocument\Release()
ProcedureReturn O_IXMLDOMNode
EndProcedure
ProcedureDLL.s PT_MSXML3_SpecialGetLastMessage()
ProcedureReturn LastMessage$
EndProcedure
ProcedureDLL.s PT_MSXML3_SpecialGetVersionInfo()
ReturnString$ = "2005-01-17"
ProcedureReturn ReturnString$
EndProcedure
;- Datasection
DataSection
CLSID_XMLDOM: ;{2933BF90-7B36-11D2-B20E-00C04F983E60}
Data.l $2933BF90
Data.w $7B36,$11D2
Data.b $B2,$0E,$00,$C0,$4F,$98,$3E,$60
EndDataSection
DataSection
IID_IXMLDOMDocument: ;{2933BF81-7B36-11D2-B20E-00C04F983E60}
Data.l $2933BF81
Data.w $7B36,$11D2
Data.b $B2,$0E,$00,$C0,$4F,$98,$3E,$60
EndDataSection