Jump to content
Simpel

XML - double nodes

Recommended Posts

Simpel

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 = Win7Pro SP1   OSArch = X64   Language = 0407/german
H:\...\AutoIt3\SciTE     H:\...\AutoIt3      H:\...\AutoIt3\Include     (H:\ = Network Drive)

   88x31.png  Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind.

Share this post


Link to post
Share on other sites
jdelaney

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.

Share this post


Link to post
Share on other sites
jdelaney

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

 

  • Like 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.

Share this post


Link to post
Share on other sites
Simpel

Thank you for the example. I did this hours after I wrote my first post:

_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 = Win7Pro SP1   OSArch = X64   Language = 0407/german
H:\...\AutoIt3\SciTE     H:\...\AutoIt3      H:\...\AutoIt3\Include     (H:\ = Network Drive)

   88x31.png  Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind.

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • ijourneaux
      By ijourneaux
      I am trying to read an XML file that looks like the following. I am particularly interested in the ParameterNames and ParameterValues
       
      I was able to read a simplier XML file using
      $oXML.load("DataForwardSettings.xml") Local $oInfos = $oXML.selectnodes("//Database") ; or //Info or //Data//Info or //Values/Info  but have not been able to read
      <?xml version="1.0"?> <Entities> <Entity RecordType="TrendData"> <Property Name="AlarmLimitsSetNumber" IsReadOnly="False" ValueType="System.Int32">8</Property> <Property Name="AnalysisParamaterSetNumber" IsReadOnly="False" ValueType="System.Int32">8</Property> <Property Name="ParameterNames" IsReadOnly="True" IsList="True" ListType="List<string>" ValueType="Array" ArrayType="System.String" Count="12">System.Collections.Generic.List`1[System.String]<Data>OVERALL|PK-PK WAVEFORM|HFD|CREST FACTOR|SYNC 1-6|1X|2X|3X-4X|FTF|BSF|BPFO|BPFI</Data></Property> <Property Name="ParameterValues" IsReadOnly="True" IsList="True" ListType="List<float>" ValueType="Array" ArrayType="System.Single" Count="12">System.Collections.Generic.List`1[System.Single]<Data>0.04706,0.27951,0.02640,4.85608,0.03494,0.01727,0.02256,0.01993,0.00207,0.00060,0.00178,0.00221</Data></Property> <Property Name="NumberOfParameters" IsReadOnly="False" ValueType="System.Int32">12</Property> <Property Name="ModifiedSinceLastDataDump" IsReadOnly="False" ValueType="System.Boolean">False</Property> <Property Name="Load" IsReadOnly="False" ValueType="System.Single">0</Property> <Property Name="RPM" IsReadOnly="False" ValueType="System.Single">140.962</Property> <Property Name="Value" IsReadOnly="False" ValueType="System.Single">-1.1E-20</Property> <Property Name="SampleID" IsReadOnly="False" ValueType="System.Int32">-626794</Property> <Property Name="Timestamp_as_String" IsReadOnly="True" ValueType="System.String">8/18/2018 2:05:33 PM</Property> <Property Name="Timestamp_as_UInt" IsReadOnly="False" ValueType="System.UInt32">1534619133</Property> <Property Name="Timestamp" IsReadOnly="False" ValueType="System.DateTime">8/18/2018 2:05:33 PM</Property> <Property Name="StorageFlag" IsReadOnly="False" ValueType="Enum" EnumType="Emerson.CSI.DataImport.MHM.TrendDataStorageType" EnumValue="2">RPM_And_Overall</Property> <Property Name="Parents" IsReadOnly="False" IsList="True" ListType="List<string>" ValueType="Array" ArrayType="System.String" Count="5">System.Collections.Generic.List`1[System.String]<Data>Database=phmhmdb4ts;C:\RBMdbsrv\CustData\4ts_online_1807.rbm;-99|Area=4TS;-494|Equipment=4THTS;-712|MeasurementPoint=D39;-780|DataCollectionSet=Normal Collection Dryer Rolls;-783</Data></Property> </Entity> </Entities> I tried switching to the XML UDF but was alittle lost in how to use it. I am particularly interested in the ParameterNames and ParameterValues.
    • macran
      By macran
      I want to generating a XML file (test.xml) like as follow:
      <?xml version="1.0" encoding="GBK"?>
      <!DOCTYPE SCHEMA SYSTEM "HGWSPZJK.dtd">  ;I can not generate this line
      <SCHEMA CRC="HGWSPZ201808_9131011571786229XM_CRC.XML" SSSQ="201808" CHSNAME="HGWSDKQD" NAME="HGWSPZ">

      <TAXPAYER CJRMC="sigmagroup" CJRDM="9131011571786229XM" CJLX="DKZK" RECORDCOUNT="411" SBRQ="2018-08-31" NSRMC="sigmagroup" SWSBH="9131011571786229XM">

      <Records>
      <Record BZ="" JKKADM="2244" JKKAMC="shanghai" SE="5907.82" TFRQ="2018-08-23" FPHM="224420181000752586-L02"/>
      <Record BZ="" JKKADM="2244" JKKAMC="shanghai" SE="4742.4" TFRQ="2018-08-21" FPHM="224420181000743016-L01"/>
      <Record BZ="" JKKADM="2244" JKKAMC="shanghai" SE="18720" TFRQ="2018-08-14" FPHM="224420181000719215-L01"/>
      </Records>
      </TAXPAYER>
      </SCHEMA>
      I use XML.UDF  
      Local $oXMLile=_XML_CreateFile(@ScriptDir&"\test.xml","",True) 
      but there is no function CreateDocumentType 
      It is no effort even I test use 
      Local $doct=$oXMLfile.CreateDocumentType("SCHEMA", null, "HGWSPZJK.dtd", null)
            $oXmlfile.appendChild($doct)
      pls help me thanks.
       
       
       
       
       
       
    • Skeletor
      By Skeletor
      Hi All,
      This is purely an XML Language question. I need to understand how I can add a value/element in between another XML element. 
      Code below shows the XML file. The info tag has the elements already inserted.
      <Configuration xmlns="http://schemas.datacontract.org/2004/07/Modules.Reporting.DataContracts.LineItems" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <GenConf> <Info>ID, Site, Name , Site_ID</Info> </GenConf> </Configuration> Now, I want to add a value from a node group into this code. Something like below. But the example below does not work.
      Any suggestions?
       
      <Configuration xmlns="http://schemas.datacontract.org/2004/07/Modules.Reporting.DataContracts.LineItems" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <GenConf> <Info>ID, Site, a/@id, Name , Site_ID</Info> </GenConf> </Configuration> <ProductName> <a id="Windows Server"/> </ProductName>  
    • bhns
      By bhns
      try it for make flyers old games xml + Gdi, i belive many sources had lost 
      AIT-ADRLIST.au3

    • CosminV
      By CosminV
      Hello guys,
       
      This XML things are driving me crazy...
      Please let me know how can I use the _XMLGetAttrib function... I've tried every possible way that I've read on the forum and I cannot succeed reading an attribute.
       
      The XML looks like bellow:
       
      <?xml version="1.0" encoding="UTF-8"?>
      <BATCH attr1= "aaa" attr2="bbb" attr3="ccc">
           <Node1 attr1="aaa" attr2="bbb" attr3="ccc" attr4="ddd" attr5="" attr6="eee" attr7="fff" attr8="ggg"/>
           <Node2 attr1="aaa" attr2="" attr3="" attr4="ddd"/>
           <Node3 attr1="" attr2="" attr3="ccc" attr4="" attr5="" attr6="eee"/>
           <Panel attr1="aaa" STATUS="BBB" attr3="ccc" attr4="ddd" attr5="" attr6="eee">
                <Node5 attr1="aaa" attr2="bbb" attr3="ccc" attr4="ddd" attr5="" attr6="eee" attr7="fff" attr8="ggg"/>
                .............................................................................................................................................................................
           </Panel>
      </Batch>
       
      I need to read the value of STATUS form the Panel node.
       
      Could you please help me?
       
      Best regards,
      Cococnb
×