0

XML Antwort weiterverarbeiten

Hallo zusammen, 

 

über einen GET Call rufe ich aus einem Warenwirtschaftsystem Lagerbstände ab. Dabei bekomme ich eine XML als Antwort: 

 

{"result":"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ArrayOfGetStockLevelReturn xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://ws-pub.ccs-express.de/\">\r\n <GetStockLevelReturn>\r\n <StockLevel>0</StockLevel>\r\n <InProcess>0</InProcess>\r\n <Reserved>0</Reserved>\r\n <BackOrder>0</BackOrder>\r\n <StockIndex>BAD</StockIndex>\r\n <HasError>false</HasError>\r\n </GetStockLevelReturn>\r\n <GetStockLevelReturn>\r\n <StockLevel>35</StockLevel>\r\n <InProcess>0</InProcess>\r\n <Reserved>0</Reserved>\r\n <BackOrder>0</BackOrder>\r\n <StockIndex>CCS-MUC</StockIndex>\r\n <HasError>false</HasError>\r\n </GetStockLevelReturn>\r\n</ArrayOfGetStockLevelReturn>"}

 

Wie kann ich denn diese XML jetzt weiterverarbeiten? Mich interessieren hier eigentlich nur die Werte vom StockIndex CCS-MUC. (fett markiert) Ich bräuchte folgende Berrechnung: 

StockLevel - InProcess - Reserved = 

Mit der Funktion parseXML komm ich leider nicht weiter. 

 

Vorab vielen Dank und Viele Grüße,

Andi

3 Antworten

null
    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hi Andi,

     

    ich würde die XML Antwort nach dem GET Abruf in ein Textfeld speichern - MEINTEXTFELD := text(response.result)

    Dann müssen die \r\n und \ entfernt werden.... über 

     

    replace(replace(Text3, "\r\n", ""), "\", "")

     

    Wenn Du ein sauberes XML ohne \ und { usw hast, kannst Du ein Berechnungsfeld anlegen mit folgendem Gesamt Code:

     

    let myXML := replace(replace(MEINTEXTFELD, "\r\n", ""), "\", "");
    let myJSON := parseXML(myXML);
    let myStockLevel := number(myJSON.ArrayOfGetStockLevelReturn.item(GetStockLevelReturn, 1).StockLevel.@);
    let myInProcess := number(myJSON.ArrayOfGetStockLevelReturn.item(GetStockLevelReturn, 1).InProcess.@);
    let myReserved := number(myJSON.ArrayOfGetStockLevelReturn.item(GetStockLevelReturn, 1).Reserved.@);
    myStockLevel - myInProcess - myReserved

    • Andi_Neumaier
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hi, 

    vielen Dank für deine Antwort. 

     

    Das mit dem XML vorher in einer Textfeld speichern hatte ich auch schon als workaround so versucht. Mir stellt sich die Frage ob das zwingend erforderlich ist. Aber anscheindend ist dem so, weil ohne liefert parseXML eine undefinierte Funktion zurück. 

     

    Dein Code klappt auch bis auf die Sache mit dem StockIndex .item(GetStockLevelReturn, 1) klappt so leider nicht. CCS-MUC ist immer das letzte Array. Kommt man da iwie mit last ran? 

     

    Grüße,

    Andi

    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Wenn es vorher eine unbestimmte Zahl an anderen Arrays gibt, dann ist item 1 natürlich quark, last(GetStockLevelReturn) geht aber dann auch.

    Und das Textfeld kann man auch umgehen, dann musst Du nur mit deinem response arbeiten...

    Ich denke du fragst mit

     

    let response := http("GET","....... usw) ab, dann sollte es mit 

     

    let myXML := replace(replace(text(response.result), "\r\n", ""), "\", "");
    let myJSON := parseXML(myXML);
    let myStockLevel := number(myJSON.ArrayOfGetStockLevelReturn.last(GetStockLevelReturn).StockLevel.@);
    let myInProcess := number(myJSON.ArrayOfGetStockLevelReturn.last(GetStockLevelReturn).InProcess.@);
    let myReserved := number(myJSON.ArrayOfGetStockLevelReturn.last(GetStockLevelReturn).Reserved.@);
    myStockLevel - myInProcess - myReserved

    auch klappen