Jump to content

xml Node help

Recommended Posts


Hi I have been struggling to get this piece of code to work, it works fine if the xml file only has one record on it but if multiple records are returned it sends back the correct code to the console. If Multiple records exist then it returns the first record ok and the first nodes of the rest of the records are also returned ok but the next node down returns a -1 error.

I have tried to work this out on my own using examples but I cant seem to sort it out, I'm new to autoit and would appreciate a guiding hand I don't expect you to do it all for me but a nudge in the right direction would be a great help Thanks in advance.

Please ignore any globals that are mentioned but not used as this is part of a larger script but this will be turned into a function so for now im using this part as a standalone script until the data returned in the console is correct I will then adjust it accordingly. Thankyou.

#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <GUIConstants.au3>
#include <GDIPlus.au3>
#include <String.au3>
#Include <WinAPI.au3>
#include <array.au3>
#include <Misc.au3>
#include <IE.au3>
#include <HTTP.au3>
#include <File.au3>
#include <GuiTab.au3>
#include <Array.au3>
#include <_XMLDOMWrapper.au3>

Global $sMyXML, $iRET, $iPitch, $sID, $sSCN, $sCC, $iBPQ, $iBPL, $iBPAI, $iSPQ, $iSPL, $iSPAI, $oIE

; Load XML

$sMyXML = @ScriptDir & "\marketprices.xml"
$iRET = _XMLFileOpen($sMyXML)
If @error Or $iRET <> 1 Then
    ConsoleWrite("Error:  Failed to load XML document:  " & $sMyXML & @LF)

$iPitch = _XMLGetNodeCount("/envelope/message/market/pitches/pitch")
ConsoleWrite("Records = " & $iPitch & @LF)
For $a = 1 To $iPitch
    $sSCN = _XMLGetAttrib("/envelope/message/market/pitches/pitch[" & $a & "]", "securityClassNarrative")
    $sID = _XMLGetAttrib("/envelope/message/market/pitches/pitch[" & $a & "]", "securityId")
    $sCC = _XMLGetAttrib("/envelope/message/market/pitches/pitch[" & $a & "]", "considerationCurrency")
    $iBPQ = _XMLGetAttrib("/envelope/message/market/pitches/pitch/buyPrices/price[" & $a & "]", "quantity")
    $iBPL = _XMLGetAttrib("/envelope/message/market/pitches/pitch/buyPrices/price[" & $a & "]", "limit")
    $iBPAI = _XMLGetAttrib("/envelope/message/market/pitches/pitch/buyPrices/price[" & $a & "]", "actionIndicator")
ConsoleWrite("Metal = " & $sSCN & @LF)
ConsoleWrite("Location = " & $sID & @LF)
ConsoleWrite("Currency = " & $sCC & @LF)
ConsoleWrite("Quantity = " & $iBPQ & @LF)
ConsoleWrite("Price = " & $iBPL & @LF)
ConsoleWrite("Buy or Sell = " & $iBPAI & @LF)

Link to comment
Share on other sites

I have to admit, I don't like the xmldomwrapper-udf. I prefer accessing the object directly:

$o = ObjCreate("Msxml2.DOMDocument")

;~ $s = FileRead(@TempDir & "\marketprices.xml")
;~ $o.loadXML($s)
$o.load(@TempDir & "\marketprices.xml")

$o.setProperty("SelectionLanguage", "XPath")
$oPitches = $o.selectNodes("//envelope/message/market/pitches/pitch")
For $oPitch In $oPitches
    $oBuyPrice = $oPitch.selectSingleNode("buyPrices/price")
    $scn = _NodeGetValue($oPitch.attributes.getNamedItem("securityClassNarrative"))
    $sid = _NodeGetValue($oPitch.attributes.getNamedItem("securityId"))
    $quant = _NodeGetValue($oBuyPrice.attributes.getNamedItem("quantity"))
    $limit = _NodeGetValue($oBuyPrice.attributes.getNamedItem("limit"))
    ConsoleWrite($scn & " - " & $sid & " - " & $quant & " - " & $limit & @CRLF)

Func _NodeGetValue(Const $oNode, $vDefault = "")
    If Not IsObj($oNode) Then Return SetError(1, 0, $vDefault)
    Return $oNode.value

The documentation can be found here: http://msdn.microsoft.com/en-us/library/ms766487%28VS.85%29.aspx

Edited by ProgAndy

*GERMAN* [note: you are not allowed to remove author / modified info from my UDFs]My UDFs:[_SetImageBinaryToCtrl] [_TaskDialog] [AutoItObject] [Animated GIF (GDI+)] [ClipPut for Image] [FreeImage] [GDI32 UDFs] [GDIPlus Progressbar] [Hotkey-Selector] [Multiline Inputbox] [MySQL without ODBC] [RichEdit UDFs] [SpeechAPI Example] [WinHTTP]UDFs included in AutoIt: FTP_Ex (as FTPEx), _WinAPI_SetLayeredWindowAttributes

Link to comment
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

  • Recently Browsing   0 members

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