Jump to content

Recommended Posts

Posted

I am very new to XML and was wondering if someone could help me create the following file using AutoIt:

<?xml version="1.0"?>
<MBNProfile xmlns="http://www.microsoft.com/networking/WWAN/profile/v1">
    <Name>Verizon Wireless</Name>
    <IsDefault>true</IsDefault>
    <ProfileCreationType>UserProvisioned</ProfileCreationType>
    <SubscriberID>12345</SubscriberID>
    <HomeProviderName>Verizon Wireless</HomeProviderName>
    <AutoConnectOnInternet>false</AutoConnectOnInternet>
    <ConnectionMode>manual</ConnectionMode>
    <Context>
        <AccessString>VZWINTERNET</AccessString>
        <Compression>DISABLE</Compression>
        <AuthProtocol>NONE</AuthProtocol>
    </Context>
</MBNProfile>

I've found a copy of the _XMLDomWrapper library but am lost as to what all of the different options are. It's a bit overwhelming.  Any help would be greatly appreciated.

Thanks!

 

Posted (edited)

Here are the general methods to use...replace with your data, and try it out:

Local $oXML = ObjCreate("Microsoft.XMLDOM")
$oXML.loadxml("<MBNProfile/>")
ConsoleWrite($oXML.xml & @CRLF)
$oRoot = $oXML.selectSingleNode("//MBNProfile")

$oNewElement1 = $oXML.createElement("test1")
$oNewElement1.text = "SomeText1"
$oNewElement2 = $oXML.createElement("test2")
$oNewElement2.text = "SomeText2"
$oNewElement3 = $oXML.createElement("test3")
$oNewElement3.text = "SomeText3"

$oRoot.appendChild($oNewElement1)
$oRoot.appendChild($oNewElement2)
$oRoot.appendChild($oNewElement3)

ConsoleWrite($oXML.xml & @CRLF)

$oXML.save("c:\path\to\your\xml.xml")

output:

<MBNProfile><test1>SomeText1</test1><test2>SomeText2</test2><test3>SomeText3</test3></MBNProfile>
 

Edited by jdelaney
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.
Posted (edited)

@jdelaney

Is there a way to save the XML file so that it be nicely hierarchically formatted , in the form of "trees".

 

EDIT:

I think I found ... working on solution

Edited by mLipok

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Posted (edited)

here is it:

#AutoIt3Wrapper_Run_AU3Check=N
;~ ADODB.STREAM : StreamReadEnum
;~ https://msdn.microsoft.com/en-us/library/windows/desktop/ms679794(v=vs.85).aspx
Global Enum _
        $g__eADO_STREAM_adReadLine = -2, _ ; Reads the next line from the stream (designated by the LineSeparator property).
        $g__eADO_STREAM_adReadAll = -1 ; Default. Reads all bytes from the stream, from the current position onwards to the EOS marker. This is the only valid StreamReadEnum value with binary streams (Type is adTypeBinary).

Global $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")

_Example_MAIN()

Func _Example_MAIN()
    Local $oXML = ObjCreate("Microsoft.XMLDOM")

    _XML_Create_Example($oXML)
    ; $oXML.save(@ScriptDir & "\Create.xml")

    MsgBox(0, '', _XML_TIDY($oXML))
EndFunc   ;==>_Example_MAIN

Func _XML_Create_Example(ByRef $oXML)
    $oXML.loadxml("<MBNProfile/>")
    $oRoot = $oXML.selectSingleNode("//MBNProfile")

    $oNewElement1 = $oXML.createElement("test1")
    $oNewElement1.text = "SomeText1"
    $oNewElement2 = $oXML.createElement("test2")
    $oNewElement2.text = "SomeText2"
    $oNewElement3 = $oXML.createElement("test3")
    $oNewElement3.text = "SomeText3"

    $oRoot.appendChild($oNewElement1)
    $oRoot.appendChild($oNewElement2)
    $oRoot.appendChild($oNewElement3)

    ConsoleWrite(@CRLF)
    ConsoleWrite($oXML.xml & @CRLF)
EndFunc   ;==>_XML_Create_Example

Func _XML_TIDY(ByRef $oXML)
    Local $oReader = ObjCreate("MSXML2.SAXXMLReader")
    Local $oWriter = ObjCreate("MSXML2.MXXMLWriter")
    Local $oStream = ObjCreate("ADODB.STREAM")
    Local $sXML_Return = ''
    With $oStream
        .Open
        .Charset = "ISO-8859-1"

        With $oWriter
            .indent = True
            .encoding = "ISO-8859-1"
            .output = $oStream
        EndWith

        With $oReader
            .contentHandler = $oWriter
            .errorHandler = $oWriter
            .Parse($oXML)
        EndWith

        .Position = 0
        $sXML_Return = .ReadText($g__eADO_STREAM_adReadAll)
    EndWith

    ; CleanUp
    $oStream = ''
    $oReader = ''
    $oWriter = ''
    Return $sXML_Return
EndFunc   ;==>_XML_TIDY


; User's COM error function. Will be called if COM error occurs
Func _ErrFunc($oError)
    ; Do anything here.
    ConsoleWrite(@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _
            @TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _
            @TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
            @TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _
            @TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _
            @TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
            @TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
            @TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
            @TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
            @TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
EndFunc   ;==>_ErrFunc

 

 

EDIT:

based on: http://www.visualbasicscript.com/Formatting-of-XML-file-m77414.aspx

 

also here is some intresting examples

http://stackoverflow.com/questions/11144192/how-can-i-save-an-msxml2-domdocument-with-indenting-i-think-it-uses-mxxmlwrite

http://stackoverflow.com/questions/6405236/forcing-msxml-to-format-xml-output-with-indents-and-newlines

 

Edited by mLipok
remarks, and script cleanup

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

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
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...