lrstndm Posted July 22, 2015 Posted July 22, 2015 I was searching the forum too find a way to read XML files. There are many options (also very old options), but my question is which is the best for now and which is the best for my problem?I have a XML file like this:<Data> <Values> <Info>Information value 1</Info> <Info>Information value 2</Info> </Values> <Other>Other information</Other> </Data>What I want to have is a function where you can basically call the function 'getValue' or 'getValues' with the path to the value(s)e.g.getValue('Data\Other')orgetValues('Data\Values\Info')What is the best solution for me? Hope someone can help me out.Regards,lrstndm
MikahS Posted July 22, 2015 Posted July 22, 2015 Have a look at these links in this link: LinkThat should give you an idea of how to start. Snips & Scripts My Snips: graphCPUTemp ~ getENVvarsMy Scripts: Short-Order Encrypter - message and file encryption V1.6.1 ~ AuPad - Notepad written entirely in AutoIt V1.9.4 Feel free to use any of my code for your own use. Forum FAQ
jdelaney Posted July 23, 2015 Posted July 23, 2015 Example:;~ Create the temp xml #include <File.au3> _FileCreate("Temp") FileWrite("Temp","<Data><Values><Info>Information value 1</Info><Info>Information value 2</Info></Values><Other>Other information</Other></Data>") Local $oXML = ObjCreate("Microsoft.XMLDOM") $oXML.load("Temp") $oOther = $oXML.SelectSingleNode("//Data/Other") ; or //Other ConsoleWrite("$oOther.text=[" & $oOther.text & "]" & @CRLF) $oInfos = $oXML.SelectNodes("//Data/Values/Info") ; or //Info or //Data//Info or //Values/Info For $oInfo In $oInfos ConsoleWrite("$oInfo.text=[" & $oInfo.text & "]" & @CRLF) Nextoutputs:$oOther.text=[Other information]$oInfo.text=[Information value 1]$oInfo.text=[Information value 2] robertocm 1 IEbyXPATH-Grab IE DOM objects by XPATH IEscriptRecord-Makings of an IE script recorder ExcelFromXML-Create Excel docs without excel installed GetAllWindowControls-Output all control data on a given window.
lrstndm Posted July 23, 2015 Author Posted July 23, 2015 jdelaney, Thank you!This is the thing I was been looking for. With this I can work on.
KF5WGB Posted December 26, 2017 Posted December 26, 2017 jdelaney and all coders,, Long time since this threat started. However, it has just what I needed with one exception. The first post had only a simple "multiple node" and my xml file has more stuff in the nodes tags. If you run the script and check the created solar.xml you see what I mean. What it does: It downloads solardata, writes it to a xml file and then picks a few infos out of that xml file and displays it in a MsgBox. HAM radio operators use those infos. My problem is at the end where a "multiple node" needs to be read and put into strings e.g $band1day, $band2day...... band$4night. Code: expandcollapse popup;Display Solar data in popup ;coded by: KF5WGB ; ;Get the Solar data from the net Global $oXML = ObjCreate("Microsoft.XMLHTTP") $oXML.Open("GET", "http://www.hamqsl.com/solarxml.php", 0) $oXML.Send $oReceived = $oXML.ResponseText $oStatusCode = $oXML.Status ;and save it as solar.xml If $oStatusCode == 200 then $file = FileOpen("solar.xml", 2) ; The value of 2 overwrites the file if it already exists FileWrite($file, $oReceived) FileClose($file) EndIf Local $oXML = ObjCreate("Microsoft.XMLDOM") $oXML.load("solar.xml") $updated = $oXML.SelectSingleNode("solar/solardata/updated") ; updated ConsoleWrite("$updated.text=" & $updated.text & "" & @CRLF) $sunspots = $oXML.SelectSingleNode("solar/solardata/sunspots") ; sunspots ConsoleWrite("$sunspots.text=[" & $sunspots.text & "]" & @CRLF) $xray = $oXML.SelectSingleNode("solar/solardata/xray") ; xray ConsoleWrite("$xray.text=[" & $xray.text & "]" & @CRLF) $solarflux = $oXML.SelectSingleNode("solar/solardata/solarflux") ; solarflux ConsoleWrite("$solarflux.text=[" & $solarflux.text & "]" & @CRLF) $aindex = $oXML.SelectSingleNode("solar/solardata/aindex") ; aindex ConsoleWrite("$aindex.text=[" & $aindex.text & "]" & @CRLF) $kindex = $oXML.SelectSingleNode("solar/solardata/kindex") ; kindex ConsoleWrite("$kindex.text=[" & $kindex.text & "]" & @CRLF) $solarwind = $oXML.SelectSingleNode("solar/solardata/solarwind") ; solarindex ConsoleWrite("$solarwind.text=[" & $solarwind.text & "]" & @CRLF) $oInfos = $oXML.SelectNodes("solar/solardata/calculatedconditions/band"); ..and here is the problem For $oInfo In $oInfos ;Local $band[????] = $oInfo.text ; array ?? how to read it?? ConsoleWrite("$oInfo.text=[" & $oInfo.text & "]" & @CRLF) Next MsgBox(64,"Solardata @ " & $updated.text,"Sunspots: " & $sunspots.text & @CRLF & "Xray: " & $xray.text & @CRLF & "Solarflux: " & $solarflux.text & @CRLF & "A: " & $aindex.text & @CRLF & "K: " & $kindex.text & @CRLF & "Solarwind: " & $solarwind.text & @CRLF & @CRLF & $oInfo.text & @CRLF & @CRLF & @CRLF & " written by:KF5WGB") As you can see, after running the script, consolewrite shows each value. The Msgbox ($oInfo.text) shows the last value of the "multiple nodes". How would put each value in a string? Thanks in advance KF5WGB
mikell Posted December 26, 2017 Posted December 26, 2017 (edited) You might try this $oInfos = $oXML.SelectNodes("solar/solardata/calculatedconditions/band"); ..and here is the problem $test = "" For $oInfo In $oInfos ;$oAttrs = $oInfo.attributes ;$test &= $oAttrs(0).value &" ("& $oAttrs(1).value & "): " & $oInfo.text & @crlf $test &= $oInfo.getattribute("name") &" ("& $oInfo.getattribute("time") & "): " & $oInfo.text & @crlf Next msgbox(0,"test", $test) Edited December 27, 2017 by mikell still learning xml :) robertocm 1
KF5WGB Posted December 27, 2017 Posted December 27, 2017 mikell, Awesome. I was happy with the first one but the second one is even better. Thank you so much. Working the string is easy for me. I started to read the XML tutorial @ w3school.com and I must say.... I have some serious reading to do. Thanks again KF5WGB
van_renier Posted February 1, 2018 Posted February 1, 2018 This is a great thread. This might be a dumb/easy question to answer, but how might I be able to read in an XML file, and get the names of the elements? like in the 1st example given. <Data> <Values> <Info>Information value 1</Info> <Info>Information value 2</Info> </Values> <Other>Other information</Other> </Data> The script examples above clearly helped me get the values of the elements, (i.e. "Information value 1" and 2,) but How would I be able to get the elements of those?, ie. "Data", "Values", "Info", "Other", etc... This is probably more working with object-related coding than the XML file itself. For example.. $oInfos = $oXML.SelectNodes("SMPUBLISH") ; or //Info or //Data//Info or //Values/Info For $oInfo In $oInfos ConsoleWrite("$oInfo.text=[" & $oInfo.text & "]" & @CRLF) Next $oInfo.text will retrieve the value within the elements, how would I get the value of the elements themselves? ================= <SMPUBLISH> <SERVER> <SHORT_NAME>smpolicysrv </SHORT_NAME> <FULL_NAME>SiteMinder Policy Server </FULL_NAME> <PRODUCT_NAME>SiteMinder(tm) </PRODUCT_NAME> <VERSION>12.52 </VERSION> </SERVER> </SMPUBLISH> ================= In the above excerpt of an XML file, the elements within a node might change, The scripts earlier allow me/us to get the values of these nodes, but what about getting the name of the nodes too? Thanks, Van
mikell Posted February 1, 2018 Posted February 1, 2018 Do you mean this ? Local $oXML = ObjCreate("Microsoft.XMLDOM") $oXML.load("Temp") Local $txt = "" $oItem = $oXML.SelectSingleNode("SMPUBLISH/SERVER") For $oNode In $oItem.childNodes $txt &= $oNode.nodename & " = " & $oNode.text & @crlf Next Msgbox(0,"", $txt)
KF5WGB Posted December 19, 2018 Posted December 19, 2018 Hi coders, Long time, no mess up. I think I am loosing it. Looking at a little routine for hours and do not see the problem. I have a huge Settings.xml file and all I need is two node values out of it. The XML looks like this: <?xml version="1.0" encoding="UTF-8"?> <unneeded stuff>....</unneeded stuff> <unneeded stuff>....</unneeded stuff> <unneeded stuff>....</unneeded stuff> <N3FJPTCPENABLED>True</N3FJPTCPENABLED> <N3FJPTCPPORT>1180</N3FJPTCPPORT> <unneeded stuff>....</unneeded stuff> <unneeded stuff>....</unneeded stuff> All I need are those two nodes. The complete XML is attached. So far I use this: GetServerStat() Func GetServerStat() Local $oXML = ObjCreate("Microsoft.XMLDOM") If FileExists("Settings.xml") then $oXML.load("Settings.xml") Else MsgBox(0,"ERROR", "File not found") EndIf Local $TCPENABLED = $oXML.SelectSingleNode("N3FJPTCPENABLED") ; Server on or off ConsoleWrite("Server: " & $TCPENABLED.text & @CRLF) Local $TCPPORT = $oXML.SelectSingleNode("N3FJPTCPPORT") ; TCP Port ConsoleWrite("Port: " & $TCPPORT.text & @CRLF) EndFunc ;==>GetServerStat Consolewrite gives me this: "G:\Coding\AutoIt\findfile\getsettingsxmldata.au3" (16) : ==> The requested action with this object has failed.: ConsoleWrite("Server: " & $TCPENABLED.text & @CRLF) ConsoleWrite("Server: " & $TCPENABLED^ ERROR I take a break for a few hours. Pretty sure I miss something simple. Anyway... as always... Thanks for any help. Kf5WGB Settings.xml
careca Posted December 19, 2018 Posted December 19, 2018 I would go with _stringbetween See this post Spoiler Renamer - Rename files and folders, remove portions of text from the filename etc. GPO Tool - Export/Import Group policy settings. MirrorDir - Synchronize/Backup/Mirror Folders BeatsPlayer - Music player. Params Tool - Right click an exe to see it's parameters or execute them. String Trigger - Triggers pasting text or applications or internet links on specific strings. Inconspicuous - Hide files in plain sight, not fully encrypted. Regedit Control - Registry browsing history, quickly jump into any saved key. Time4Shutdown - Write the time for shutdown in minutes. Power Profiles Tool - Set a profile as active, delete, duplicate, export and import. Finished Task Shutdown - Shuts down pc when specified window/Wndl/process closes. NetworkSpeedShutdown - Shuts down pc if download speed goes under "X" Kb/s. IUIAutomation - Topic with framework and examples Au3Record.exe
jdelaney Posted December 19, 2018 Posted December 19, 2018 Local $TCPENABLED = $oXML.SelectSingleNode("//N3FJPTCPENABLED") ; Server on or off ConsoleWrite("Server: " & $TCPENABLED.text & @CRLF) Local $TCPPORT = $oXML.SelectSingleNode("//N3FJPTCPPORT") IEbyXPATH-Grab IE DOM objects by XPATH IEscriptRecord-Makings of an IE script recorder ExcelFromXML-Create Excel docs without excel installed GetAllWindowControls-Output all control data on a given window.
KF5WGB Posted December 19, 2018 Posted December 19, 2018 9 minutes ago, jdelaney said: Local $TCPENABLED = $oXML.SelectSingleNode("//N3FJPTCPENABLED") ; Server on or off ConsoleWrite("Server: " & $TCPENABLED.text & @CRLF) Local $TCPPORT = $oXML.SelectSingleNode("//N3FJPTCPPORT") Hi jdelaney, I had put those // in before. Did not work. That made me scratch my head and wonder.
KF5WGB Posted December 20, 2018 Posted December 20, 2018 1 hour ago, careca said: I would go with _stringbetween Works great. Did not know about the _StringBetween func. Much easier than the xml stuff :-) Thanks.
jdelaney Posted December 20, 2018 Posted December 20, 2018 It is until you get complex xml and want to easily parse out specific attribute/values. IEbyXPATH-Grab IE DOM objects by XPATH IEscriptRecord-Makings of an IE script recorder ExcelFromXML-Create Excel docs without excel installed GetAllWindowControls-Output all control data on a given window.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now