Jump to content
Sign in to follow this  
ModemJunki

XML help

Recommended Posts

ModemJunki

I didn't want to necropost here: '?do=embed' frameborder='0' data-embedContent>>

Using the XML wrapper in the link above (also attached here), how can I enumerate the names within a section in the XML file?

Lets say I want to extract all of the setting names inside the below XML, I try using the function _XMLGetAllAttrib but there is no result. I was expecting that $a_names would contain the attribute names.

#include <array.au3>
#include <XMLDomWrapper.au3>

Global Const $sConfigFile = @ScriptDir & "\test.xml"
If Not FileExists($sConfigFile) Then
    $sErrorMsg = "Configuration File FolderMenu.xml Does Not Exist." & @LF & "Default Configuration File Is Used." & @LF
    MsgBox(4096, "", $sErrorMsg)
EndIf
If _XMLFileOpen($sConfigFile) = -1 Then
    $sErrorMsg &= "Error opening " & $sConfigFile & "."
    MsgBox(4096, "", $sErrorMsg)
EndIf

Global $a_Names[1]
Global $a_Values[1]

$a_Return = _XMLGetAllAttrib("SysSettings/SystemSpecific/MODEL/NICPowerSettings", $a_Names, $a_Values, "Setting")

If @error = -1 Then
    MsgBox(4096, "Error", $a_Return)
Else
    _ArrayDisplay($a_Names, "Names")
    _ArrayDisplay($a_Values, "Values")
EndIf
<?xml version="1.0" encoding="UTF-8"?>
<SysSettings>
    <SystemSpecific>
        <MODEL>
            <NICPowerSettings>
                <Setting Name="PMARPffload" Value="*PMARPOffload,REG_SZ,0"></Setting>
                <Setting Name="PMNSOffload" Value="*PMNSOffload,REG_SZ,0"></Setting>
                <Setting Name="WakeOnMagicPacket" Value="*WakeOnMagicPacket,REG_SZ,0"></Setting>
                <Setting Name="WakeOnPattern" Value="*WakeOnPattern,REG_SZ,0"></Setting>
                <Setting Name="EEELinkAdvertisement" Value="EEELinkAdvertisement,REG_SZ,0"></Setting>
                <Setting Name="ReduceSpeedOnPowerDown" Value="ReduceSpeedOnPowerDown,REG_SZ,0"></Setting>
            </NICPowerSettings>
        </MODEL>
    </SystemSpecific>
    <Global>
    </Global>
</SysSettings>

Test.xml

test.au3

XMLDomWrapper.au3


Always carry a towel.

Share this post


Link to post
Share on other sites
AdamUL

Check your XPATH in the _XMLGetAllAttrib function call.  Try this.

/SysSettings/SystemSpecific/MODEL/NICPowerSettings/

You could also just go with this as well.  Just using the full XPATH without the last parameter.  

$a_Return = _XMLGetAllAttrib("/SysSettings/SystemSpecific/MODEL/NICPowerSettings/Setting", $a_Names, $a_Values)

Also, if you use Notepad++, download the XML Tools plug-in.  It is very helpful when working with XPATH queries on an XML file.  

 

Adam

Share this post


Link to post
Share on other sites
ModemJunki

Thank you, AdamUL. The leading "/" was the key.

Now the return is populated but only by one record (the last one). Maybe I'm not understanding the function - I thought it would return an array of all the setting names.

But I can work with this, I can query the count of the child nodes, then parse each one in turn with_XMLGetAllAttribIndex and act on it. I will try to test this further tomorrow.

$a_Count = _XMLGetChildNodes("/SysSettings/SystemSpecific/MODEL/NICPowerSettings")
$Idx = $a_Count[0] -1
For $i= 1 to $a_Count[0]
    $a_Return = _XMLGetAllAttribIndex("/SysSettings/SystemSpecific/MODEL/NICPowerSettings/", $a_Names, $a_Values, $a_Count[$i], $Idx)
    _ArrayDisplay($a_Values)
    $Idx = ($Idx - 1)
Next

Always carry a towel.

Share this post


Link to post
Share on other sites
AdamUL

Your welcome, glad I could help.  I believe this function has some issues.  

This UDF needs a lot of updating, at least to me.  i am currently working on project that deals with a lot of XML files.  To make my work easier, I'm currently working on updating this UDF to make it possible to work with multiple XML files at the same time.  I'm also working on determining how the functions work, if they do what they say they will do, and determine if some are even needed.  For some things, it is easier to work with the DOM's properties and methods directly.  I plan on adding the updated UDF library to Example Scripts, when I finish updating it.   

Here is the DOM Reference, if you are interested.  

 

Adam

Share this post


Link to post
Share on other sites
ModemJunki

I would be very interested to see an updated version of this UDF. Unfortunately I'm still something of an amateur and so can't really be of any help.


Always carry a towel.

Share this post


Link to post
Share on other sites
Iczer

Here is the DOM Reference, if you are interested. 

 

i would really appreciate *.chm version of this manual... maybe someone can provide it?..

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
Sign in to follow this  

  • 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
×