basierend auf dem script von @TheDewd (welches hier bereits erwähnt wurde), (m)ein Versuch eines XMLtools, abseits der im Forum bereits verfügbaren XML-parser-Boliden. Die/eine Test-Datei ist hier aus dem verlinkten Thread zum Download verfügbar.
Der Scriptverlauf sollte soweit selbst erklärend sein.
Code: Select all
#NoEnv
#SingleInstance, Force
SetWorkingDir, A_ScriptDir
nodes :=["AgencyId" ; 'nodes'-array-object that contains all nodes of interest.
,"IncidentDateTime"
,"RunReportNarrative"
,"StreetAddress"
,"City","State"
,"ZipCode"
,"GpsLocationLatitude"
,"GpsLocationLongitude"
,"CrossStreet"
,"TypeOfServiceRequested"]
FileRead, XMLData ; XML document that'll be parsed
, FLOWMSP_202057dd_0757.xml
Random, No, 1, nodes.Count() ; get random array-object position for testing
value := xmlRead(XMLData,nodes[No]) ; request a single (random) nodes' value (for testing, see 'nodes'-array-object above)
MsgBox % nodes[No] " : " value[nodes[No]]
value := xmlRead(XMLData,"AgencyId") ; requesting the value of the 'AgencyId' node without using a preset 'nodes'-array-object
MsgBox % value["AgencyId"]
value := xmlRead(XMLData,nodes) ; requesting the 'value'-array-object for all values
for k, v in value ; "for every key/node take its value that's in the 'value'-array-object"
lst .= k " : " v "`n" ; creating a 'key : value' list
MsgBox % lst
xmlRead(XMLData,nodes,occ:=1) {
value := {}
(IsObject(nodes)=1) ? nodes : nodes := [nodes] ; create 'single node' array-object if a preset 'nodes'-array-object isn't used.
for pos, node in nodes {
RegExMatch(XMLData, "s)<" . node . ">(.*?)<\/" . node . ">", res)
value[node] := res%occ%
}
Return value
}