Simpel Posted May 16, 2017 Posted May 16, 2017 Hi. I'm trying to write a xml. Here is my code: #include <_XMLDomWrapper.au3> #include <Date.au3> Global $g_sXMLFileName Global $g_sDestPath = @DesktopDir & "\" Global $g_sReturnedBID = "A10829" _makeXML() _AddXML(1, "A10829_Thomas/wav/T001.wav") _AddXML(2, "A10829_Thomas/wav/T002.wav") Exit Func _makeXML() Local $sXMLtime = StringReplace(StringReplace(StringReplace(_NowCalc()," ","_"),":","-"),"/","-") ; in yyyy-mm-dd_hh-mm-ss $g_sXMLFileName = $g_sDestPath & $g_sReturnedBID & "_" & "EB-Ton-Upload" & "_" & $sXMLtime & ".xml" _XMLCreateFile($g_sXMLFileName, "gemagvl", 1,1) _XMLFileOpen($g_sXMLFileName) EndFunc Func _AddXML($iCount, $sDateiname) _XMLCreateRootNodeWAttr("row", "count", $iCount, "") _XMLCreateChildNode("//row", "picklistenname", $g_sReturnedBID & "_EB-Ton-Upload") _XMLCreateChildNode("//row", "picklisteninfo") _XMLCreateChildNode("//row", "bid", $g_sReturnedBID) _XMLCreateChildNode("//row", "audiodateiname", $sDateiname) _XMLCreateChildNode("//row", "titel", StringTrimRight(StringTrimLeft($sDateiname, 7), 4)) _XMLCreateChildNode("//row", "interpret", "EB") _XMLCreateChildNode("//row", "quelle", "Ton") EndFunc It returns: <?xml version="1.0" encoding="UTF-8"?><gemagvl> <row count="1"> <picklistenname>A10829_EB-Ton-Upload</picklistenname> <picklisteninfo/> <bid>A10829</bid> <audiodateiname>A10829_Thomas/wav/T001.wav</audiodateiname> <titel>Thomas/wav/T002</titel> <interpret>EB</interpret> <quelle>Ton</quelle> <picklistenname>A10829_EB-Ton-Upload</picklistenname> <picklisteninfo/> <bid>A10829</bid> <audiodateiname>A10829_Thomas/wav/T002.wav</audiodateiname> <titel>Thomas/wav/T003</titel> <interpret>EB</interpret> <quelle>Ton</quelle> </row> <row count="2"> <picklistenname>A10829_EB-Ton-Upload</picklistenname> <picklisteninfo/> <bid>A10829</bid> <audiodateiname>A10829_Thomas/wav/T002.wav</audiodateiname> <titel>Thomas/wav/T003</titel> <interpret>EB</interpret> <quelle>Ton</quelle> </row> </gemagvl> But it should return: <?xml version="1.0" encoding="UTF-8"?><gemagvl> <row count="1"> <picklistenname>A10829_EB-Ton-Upload</picklistenname> <picklisteninfo/> <bid>A10829</bid> <audiodateiname>A10829_Thomas/wav/T001.wav</audiodateiname> <titel>Thomas/wav/T002</titel> <interpret>EB</interpret> <quelle>Ton</quelle> </row> <row count="2"> <picklistenname>A10829_EB-Ton-Upload</picklistenname> <picklisteninfo/> <bid>A10829</bid> <audiodateiname>A10829_Thomas/wav/T002.wav</audiodateiname> <titel>Thomas/wav/T003</titel> <interpret>EB</interpret> <quelle>Ton</quelle> </row> </gemagvl> The second inserted nodes are double. How will it be going right? Regards, Conrad SciTE4AutoIt = 3.7.3.0 AutoIt = 3.3.14.2 AutoItX64 = 0 OS = Win_10 Build = 19044 OSArch = X64 Language = 0407/german H:\...\AutoIt3\SciTE H:\...\AutoIt3 H:\...\AutoIt3\Include (H:\ = Network Drive) Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind.
jdelaney Posted May 19, 2017 Posted May 19, 2017 You are adding the data into //row...which is every instance of a row node. This works great when you have only one //row, but when you create the second node, you also re-add the data to the first...I'd just use the direct XML dom, myself: .createElement .appendChild .text .selectSingleNode 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.
jdelaney Posted May 19, 2017 Posted May 19, 2017 Meh, I was bored...example: Local $oXML = ObjCreate("Microsoft.XMLDOM") $oXML.loadxml("<gemagvl />") $oRoot = $oXML.selectSingleNode("//gemagvl") AddXML($oXML,$oRoot) AddXML($oXML,$oRoot) AddXML($oXML,$oRoot) AddXML($oXML,$oRoot) AddXML($oXML,$oRoot) AddXML($oXML,$oRoot) ConsoleWrite($oXML.xml & @CRLF) Exit Func AddXML($oXML,$o) Local $i = $o.selectNodes("./row").length + 1 Local $oChild = $oXML.createElement("row") $oChild.SetAttribute("count",$i) Local $oChild_1 = $oXML.createElement("blah") Local $oChild_2 = $oXML.createElement("blah2") Local $oChild_3 = $oXML.createElement("blah3") Local $oChild_4 = $oXML.createElement("blah4") $oChild_1.text = $i & 1 $oChild_2.text = $i & 2 $oChild_3.text = $i & 3 $oChild_4.text = $i & 4 $oChild.appendChild($oChild_1) $oChild.appendChild($oChild_2) $oChild.appendChild($oChild_3) $oChild.appendChild($oChild_4) $o.appendChild($oChild) EndFunc 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.
Simpel Posted May 26, 2017 Author Posted May 26, 2017 Thank you for the example. I did this hours after I wrote my first post: expandcollapse popup_CreateXML() Local $iCounter = 1 For $i = 1 To 10 _AddXML($iCounter, "Test-Dateiname_" & $i) $iCounter +=1 Next _CloseXML() Exit Func _CreateXML() Local $sXMLtime = StringReplace(StringReplace(StringReplace(_NowCalc()," ","_"),":","-"),"/","-") ; in yyyy-mm-dd_hh-mm-ss $g_sXMLFileName = $g_sDestPath & $g_sReturnedBID & "_" & "EB-Ton-Upload" & "_" & $sXMLtime & ".xml" $g_sXMLFileHandle = FileOpen($g_sXMLFileName, 1) Local $sXMLHeader = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' Local $sXMLRootOpen = '<gemagvl xmlns="http://www.xyz.de/vbai/schema/gemagvl">' FileWrite($g_sXMLFileHandle, $sXMLHeader) FileWrite($g_sXMLFileHandle, $sXMLRootOpen) EndFunc Func _AddXML($iCount, $sDateiname) Local $sXMLRowOpen = '<row count="' & $iCount & '">' Local $sXMLInterpret = '<interpret>EB</interpret>' Local $sXMLTitel = '<titel>' & StringTrimRight(StringTrimLeft($sDateiname, 7), 4) &'</titel>' Local $sXMLBID = '<bid>' & $g_sReturnedBID & '</bid>' Local $sXMLAudiodateiname = '<audiodateiname>' & $sDateiname & '</audiodateiname>' Local $sXMLQuelle = '<quelle>Ton</quelle>' Local $sXMLPicklisteninfo = '<picklisteninfo></picklisteninfo>' Local $sXMLPicklistenname = '<picklistenname>EB-Ton-Upload</picklistenname>' Local $sXMLPicklistenzaehler = '<picklistenzaehler>' & $iCount & '</picklistenzaehler>' Local $sXMLRowClose = '</row>' FileWrite($g_sXMLFileHandle, $sXMLRowOpen) FileWrite($g_sXMLFileHandle, $sXMLInterpret) FileWrite($g_sXMLFileHandle, $sXMLTitel) FileWrite($g_sXMLFileHandle, $sXMLBID) FileWrite($g_sXMLFileHandle, $sXMLAudiodateiname) FileWrite($g_sXMLFileHandle, $sXMLQuelle) FileWrite($g_sXMLFileHandle, $sXMLPicklisteninfo) FileWrite($g_sXMLFileHandle, $sXMLPicklistenname) FileWrite($g_sXMLFileHandle, $sXMLPicklistenzaehler) FileWrite($g_sXMLFileHandle, $sXMLRowClose) EndFunc Func _CloseXML() Local $sXMLRootClose = '</gemagvl>' FileWrite($g_sXMLFileHandle, $sXMLRootClose) FileClose($g_sXMLFileHandle) EndFunc Is there a problem when I create my XML with "FileWrite"? Will it need more time to create? Regards, Conrad SciTE4AutoIt = 3.7.3.0 AutoIt = 3.3.14.2 AutoItX64 = 0 OS = Win_10 Build = 19044 OSArch = X64 Language = 0407/german H:\...\AutoIt3\SciTE H:\...\AutoIt3 H:\...\AutoIt3\Include (H:\ = Network Drive) Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind.
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