Ankündigung

Einklappen
Keine Ankündigung bisher.

XML Parsen mit XPATH?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    XML Parsen mit XPATH?

    Hallo zusammen,

    komm mit dem XML parsen nicht weiter.

    Folgende Rule habe ich erstellt:
    Code:
    rule "Heizung"
    when
        Time cron "0/1 * * * * ?"
    then
        var rjson = sendHttpGetRequest("http://Heizung.ip/user/var/48/10241/0/0/12197")
        logInfo("sendHttpGetRequest an Heizung","Ergebnis = " + rjson)
        
         if (rjson != null) {
            var stransform     = transform("XPATH","/value/@uri",rjson)
            logInfo("XPATH","Transform = " + stransform)
    
        }
    end

    In der Logdatei sehe ich, dass zumindest die GET Anfrage etwas zurück gibt aber die XPATH Transformation will nicht funktionieren.

    Code:
    21:39:28.000 [DEBUG] [.o.m.r.i.engine.ExecuteRuleJob:53   ] - Executing scheduled rule 'Heizung'
    21:39:28.015 [INFO ] [.sendHttpGetRequest an Heizung:53   ] - Ergebnis = <?xml version="1.0" encoding="utf-8"?>
    <eta version="1.0" xmlns="http://www.eta.co.at/rest/v1">
      <value uri="/user/var/48/10241/0/0/12197" strValue="12,0" unit="°C" decPlaces="1" scaleFactor="10" advTextOffset="0">118</value>
    </eta>
    
    21:39:28.016 [DEBUG] [i.s.XPathTransformationService:48   ] - about to transform '<?xml version="1.0" encoding="utf-8"?>
    <eta version="1.0" xmlns="http://www.eta.co.at/rest/v1">
      <value uri="/user/var/48/10241/0/0/12197" strValue="12,0" unit="°C" decPlaces="1" scaleFactor="10" advTextOffset="0">118</value>
    </eta>
    ' by the function '/value/@uri'
    21:39:28.018 [DEBUG] [i.s.XPathTransformationService:69   ] - transformation resulted in ''
    21:39:28.018 [INFO ] [org.openhab.model.script.XPATH:53   ] - Transform =
    21:39:29.000 [DEBUG] [.o.m.r.i.engine.ExecuteRuleJob:53   ] - Executing scheduled rule 'Heizung'
    Vielleicht kann mir jemand weiterhelfen?

    Folgende Links finde ich hilfreich aber helfen mir nicht weiter... ich check es einfach nicht.
    https://github.com/openhab/openhab/wiki/Transformations
    http://goessner.net/articles/JsonPath/
    https://en.wikipedia.org/wiki/XPath


    Danke und Gruß
    Zuletzt geändert von flashbang; 19.05.2016, 08:36.

    #2
    Ah ok, mit folgender Transformation hat es funktioniert:
    Code:
    var stransform     = transform("XPATH","//@strValue",rjson)
    Ergebnis:
    Code:
    09:34:20.002 [DEBUG] [.o.m.r.i.engine.ExecuteRuleJob:53   ] - Executing scheduled rule 'Heizung'
    09:34:20.002 [INFO ] [.sendHttpGetRequest an Heizung:53   ] - Ergebnis = <?xml version="1.0" encoding="utf-8"?>
    <eta version="1.0" xmlns="http://www.eta.co.at/rest/v1">
      <value uri="/user/var/48/10241/0/0/12197" strValue="13,5" unit="°C" decPlaces="1" scaleFactor="10" advTextOffset="0">135</value>
    </eta>
    
    09:34:20.018 [DEBUG] [i.s.XPathTransformationService:48   ] - about to transform '<?xml version="1.0" encoding="utf-8"?>
    <eta version="1.0" xmlns="http://www.eta.co.at/rest/v1">
      <value uri="/user/var/48/10241/0/0/12197" strValue="13,5" unit="°C" decPlaces="1" scaleFactor="10" advTextOffset="0">135</value>
    </eta>
    ' by the function '//@strValue'
    09:34:20.018 [DEBUG] [i.s.XPathTransformationService:69   ] - transformation resulted in '13,5'
    09:34:20.018 [INFO ] [org.openhab.model.script.XPATH:53   ] - Transform = 13,5

    Kommentar


      #3
      Wobei Du aufpassen musst, falls Du mit dem Wert rechnen willst, openHAB verlangt für seine Zahlen den Punkt als Dezimaltrennzeichen.

      Eventuell ginge auch "//value", dann käme z.B. 135 raus, das müsstest Du dann noch durch 10 teilen (scaleFactor=10), dann liefe es auf eine js-Transformation hinaus, da kannst Du in einem ersten Schritt per xpath den Wert ermitteln und anschließend durch 10 teilen.
      Zuletzt geändert von udo1toni; 19.05.2016, 11:47.

      Kommentar


        #4
        Servus,

        also mit "//value" komm ich auf keinen grünen Zweig, weder mit XPATH noch mit JSONPATH...

        Dein Einwand, dass ich mit dem String "13,5" nicht rechnen kann, ist natürlich berechtigt.
        Trotzdem sollte es doch in OH einen Cast String to Int geben oder?

        Kommentar


          #5
          Ja, das geht sicher. Ist halt lästig, dass man die Nachkommastellen nur mit Aufwand erreichen kann.

          Kommentar

          Lädt...
          X