rootx

Xml obj read child and subchild help

4 posts in this topic

#1 ·  Posted (edited)

I need help to read in a loop the DVD id child and subchild. Thx

Example...

DVD001 - PAL - EN,FR,DE,ES,IT and filter the right title & descri language.  I tried with $oXML.SelectSingleNode but without success

<?xml version="1.0" encoding="UTF-8"?>
<datafile xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="mydvd.xsd">  
    <dvd name="My dvd title">
        <id>DVD001</id>
        <region>PAL</region>
        <languages>EN,FR,DE,ES,IT</languages>
        <locale lang="EN">
            <title>title en</title>
            <descri>descri en</descri>
        </locale>
        <locale lang="FR">
            <title>title fr</title>
            <descri>descri fr </descri>
        </locale>
        <locale lang="DE">
            <title>title de</title>
            <descri>descri de </descri>
        </locale>
        <locale lang="ES">
            <title>title es</title>
            <descri>descri es</descri>
        </locale>
        <locale lang="IT">
            <title>title it</title>
            <descri>descri it</descri>
        </locale>
    </dvd>
    <dvd name="My dvd title 2">
        <id>DVD002</id>
        <region>USA</region>
        <languages>EN</languages>
        <locale lang="EN">
            <title>title en</title>
            <descri>descri en</descri>
        </locale>
    </dvd>
</datafile>
#include <File.au3>

$xml = @ScriptDir&"\test.xml"

Local $oXML = ObjCreate("Microsoft.XMLDOM")
$oXML.load($xml)

$id = $oXML.SelectNodes("//dvd")

For $ids In $id
    ConsoleWrite($ids.text  &@CRLF)
Next

 

Edited by rootx

Share this post


Link to post
Share on other sites



#2 ·  Posted

I fixed one question... but I need to understand how to read subchild in the correct order <locale lang=EN>... FR... etc.... THX

#include <File.au3>

$xml = @ScriptDir&"\test.xml"

Local $oXML = ObjCreate("Microsoft.XMLDOM")
$oXML.load($xml)

$oParameters = $oXML.SelectNodes("//dvd")
For $oParameter In $oParameters
    $id = $oParameter.SelectSingleNode("./id")
    $region = $oParameter.SelectSingleNode("./region")
    $languages = $oParameter.SelectSingleNode("./languages")
    $locale = $oParameter.SelectSingleNode("./locale");<--------------------------------
    ConsoleWrite($id.text &" -- "& String($region.text) &" -- "& $languages.text &" -- "& $locale.text &@CRLF)
Next

This result is incomplete:

DVD001 -- PAL -- EN,FR,DE,ES,IT -- title en descri en
DVD002 -- USA -- EN -- title en descri en

My goal is

DVD001 -- PAL -- EN,FR,DE,ES,IT -- title en -- descri en -- title fr -- descri fr -- ETC......

How can I explode an read al child locale?? THX

Share this post


Link to post
Share on other sites

#3 ·  Posted

Any suggestion. Thx

Share this post


Link to post
Share on other sites

#4 ·  Posted

Use .SelectNodes on the locale, and then loop through what's returned...you can continually add into the same variable by $sLocale &= $oBlah.text

1 person likes this

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

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

    • Simpel
      By 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
    • mLipok
      By mLipok
      I was asking @eltorro serveral times for any support  for XML DOM wrapper (COM) - with no success  
          So I took matters into my hands ..... I want to present XMLWrapperEx.au3 - BETA Version
      Want to join to the project ?
       
      Here is some description:
      ; #INDEX# ======================================================================================================================= ; Title .........: XMLWrapperEx.au3 ; AutoIt Version : 3.3.10.2++ ; Language ......: English ; Description ...: Functions to use for reading and writing XML using msxml. ; Remarks .......: BETA Version ; Author ........: mLipok ; Version .......: "1.1.1.01" ; _XML_MiscProperty_UDFVersion() #CS This UDF is created on the basis of: https://www.autoitscript.com/forum/topic/19848-xml-dom-wrapper-com/ For this reason, I attach also the last known (to me) previous version ($_XMLUDFVER = "1.0.3.98" _XMLDomWrapper_1.0.3.98_CN.au3 ) For the same reason I continue to recognize the achievements of the work of my predecessors (they are still noted in each Function header). . . . . !!!!!!!!! This is BETA VERSION (all could be changed) !!!!!!!!! . . . WORK IN PROGRES INFORMATION: For now 2015-09-01 the descripion (Function Header) can not entirely correctly describe the function. TODO: in many places I used "TODO" as a keyword to find what should be done in future . I want to: PREVENT THIS: The unfortunate nature of both the scripts is that the func return results are strings or arrays instead of objects. .     I want to: USE THIS CONCEPT:     .   All function should use Refernce to the object as first Function parameter     .   All function should return in most cases objects. There should be separate functions to Change Object collection to array     .   All function should use COM Error Handler in local scope.     .   All function should return @error which are defined in #Region XMLWrapperEx.au3 - @ERROR Enums     .    All function should have the same naming convention     .    All variables should have the same naming convention     .    There should not to be any Global Variable - exception is $g__oXMLDOM_Events     .   It should be possible easy to use XML DOM Events     .        https://msdn.microsoft.com/en-us/library/ms764697(v=vs.85).aspx     .   It should be possible easy to Debug     .    Ultimately, you should be able to do anything with your XML without having to use your own Error Handler. #CE  
      More info inside zip archive.
      This UDF can be downloaded from here:
      REMARK:
      This UDF was formerly named:   XMLWrapperEx.au3 
       
    • 31290
      By 31290
      Hi Guys, 
      Since I'm able to get a Dell equipment warranty status thanks to my API key, I'm using an UDF to extract data from an XML file and get the end date. > 
      Thing is, when using InetGet, the original file is in JSON format and the UDF is not working anymore, even if I download the file with the xml extension. Therefore, and when I manually download the page with Chrome, I have a proper XML file where the UDF is working fine.
      Here's my code:
      I even tried to convert the json to xml > https://www.autoitscript.com/forum/topic/185717-js-json-to-xml/
      I took a look here https://www.autoitscript.com/forum/topic/104150-json-udf-library-fully-rfc4627-compliant/ but I don't understand anything :/
       
      The XML read UDF is just perfect for my needs but I'm stuck here... 
      Thanks for any help you can provide
      -31290-
      3MTXM12.json
      3MTXM12.xml
    • Zaroz
      By Zaroz
      Alright, this is going to be a rather long explanation so bear with me.
      What I am trying to to is build a GUI program that, in the end, will look like this:
      The middle Frame is for displaying a desktop icon and the right frame is for displaying a selected image.
      The XML file I am using looks like this:
      <list> <item id="1"> <ico>Path\to\icon1<\ico> <img>Path\to\image1<\img> <exe>Path\to\program1<\exe> <label>UserDefinedLabel1<\label> <\item> <item id="2"> <ico>Path\to\icon2<\ico> <img>Path\to\image2<\img> <exe>Path\to\program2<\exe> <label>UserDefinedLabel2<\label> <\item> <\list> What I want this program to do is when I highlight an item in the listbox (which btw is displaying the <label> value associated with the item) I want the displayed icon and image to change to the ones associated with that entry. 
      Also I would like to include an additional dialog to open when the 'ADD' button is clicked that will add entries to the XML file that looks like this:

       
      The main problem I am running into is that I do not know much about XML and how to parse it into dynamic variables that can change based off of selection.
      Any help is appreciated.
       
       
       
      10-29-16 EDIT: For all intents and purposes, I basically want to create something similar to PStart, but with a preview pane with a customizable image for each item in it.
    • ur
      By ur
      Any internal xml API to parse and edit XML files in AutoIT?