Willkommen bei nil?, dem »Developer- oder Werkstatt-Blog« des Uninformat mit Artikeln rund um das Thema »Webentwicklung«. Die Artikel sind im »klassischen« Blog-Stil umgekehrt chronologisch aufgelistet. nil? kann über einen RSS- oder JSON-Feed abonniert werden. Mehr zum Autor und weitere Infos, Links und Kontakt-Optionen gibt es im Footer.

XML in Rails verarbeiten

xml rails ruby

XML! Kaum jemand ist ein großer Fan davon, man kann dem großen Klammern-Salat aber kaum entrinnen, wenn man mit externen Daten von »The Enterprise™« arbeiten muss. Zur Weiterverarbeitung in der eigenen Rails-Anwendung hatte ich dazu bisher stets eine große Parserei mit Nokogiri veranstaltet oder auf zur Datenquelle passende Gems zurückgegriffen.

Aber, TIL: Schon seit Rails 3.0.0 hat Active Support eine Erweiterung für Hash an Bord, die einen String voller hässliches XML in einen wohlgeformten Hash umwandelt.

Ein Beispiel, hier ist ein Stück XML:

  <?xml version="1.0" encoding="ISO-8859-1" ?>
  <produkt>
    <ean><![CDATA[4212345678901]]></ean>
    <name><![CDATA[Biereis am Stiel]]></name>
    <gruppe id="1">
      <name><![CDATA[Bierige Dinge]]></name>
      <merkmal id="kategorie">
        <name><![CDATA[kategorienname]]></name> 
        <wert><![CDATA[Gefrorenes Bier]]></wert>
      </merkmal>
    </gruppe>
  </produkt>

Das steckt in einer Variable productugly und soll zur vernünftigen Weiterverarbeitung in einen Hash umgewandelt werden. Dazu erweitert Active Support Rubys Hash um die Methode from_xml:

  productnice = Hash.from_xml(productugly)

Das Ergebnis ist ein schöner Hash:

  {"produkt"=>
    {"ean"=>"4212345678901", 
    "name"=>"Biereis am Stiel", 
    "gruppe"=>
      {"id"=>"1", 
      "name"=>"Bierige Dinge", 
      "merkmal"=>
        {"id"=>"kategorie", 
        "name"=>"kategorienname", 
        "wert"=>"Gefrorenes Bier"}
      }
    }
  }

So einfach! Peinlich, dass ich das erst nach 9 Jahren (Rails 3.0 erschien im August 2010…) mitbekommen habe. Aber besser spät als nie…

Tagwolke – Aktuelle Themen

Relevante Tags (alle anzeigen) der letzten Beiträge. Eine Tagwolke aller Artikel gibt es im Archiv.