XML in Rails verarbeiten

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…

xml rails ruby

Autor: