Die Programmiersprache Ruby

Blog| Forum| Wiki  

Hauptseite

XML mit Ruby bearbeiten


Es gibt viele Module|Library|Gem [1]für XML in Ruby

als Standart wurde REXML in Ruby integriert ist in reinen Rubycode geschrieben
Da die Auswertung von grossen XML-Dateien zeitaufwendig sind wurden besser auf C oder C++ Module entwickelt.
Libxml und als weitere Verbesserung Nokogiri
In Modul Rexml wird der namespace nicht richtig unterstützt.


Hinweis zur Installation
Mit Hilfe von Gemcutter eine Internetanwendung, kann die Version und das Betriebssystem ausgewählt werden.
Es wird auch angezeigt welche Abhänigkeiten zu andern Gems vorhanden sind, die zurm Installieren diese Gems benötigt werdén.
Ein weiters Hilfsmittel ist ein Button zum Kopiern der Befehl in den Zwichenspeicher.
Diese Funktion erleicht das Arbeiten in der CMD-box.
Mit rechter Maustaste kann die gespeichert Information in der BOX einfügt und dann ausführt werden

Unter Ruby 1.8.6-26 Windows
auf die Seite von RubyForge clicken und rubygems-1.3.5.zip downloaden. Das Zipfile in c:\ entpacken und dann in das Verzeichnis c:\rubygems-1.3.5 wechseln
Ruby setup.rb aufrufen und dann auf rubygems 1.3.5 updaten
Im Gemcutter sieht man welche Module noch gebraucht werden alle download wenn nicht vorhanden

zum Abschluss gem update --system eingeben

libxml 1.1.3 downloaden
da Libxml auf c Routinen zurück greift müssen diese für Windows kompiliert sein Version 1.1.3 x86-mswin32 wählen

nokogiri 1.4.1 downloaden
da Nokogiri auf c Routinen zurück greift müssen diese für Windows kompiliert sein Version 1.4.1 x86-mswin32 wählen

Beim Testen wurde eine Warning ausgeben in Programmteil builder.rb Zeile 272 abändern in


insert(@doc.create_text_node(string))

Nun arbeiten mit XML und Ruby
Einlesen von XML Daten.


Die Sache mit den Namespace Die Aufgabe von Namespace ist die Trennung, Einzigartigkeit und die Eigenständigkeit von XML Daten dazustellen


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#Der Standardfall xmlns:my="http://xml-looser.com/test"
require 'rubygems'
require 'xml/libxml'
response = <<-REMOTE_XML
<?xml version="1.0" encoding="UTF-8"?>
<rootNode xmlns:my="http://xml-looser.com/test">
  <list>
    <item>wert1</item>
    <item>wert2</item>
  </list>
</rootNode>
REMOTE_XML
document = XML::Parser.string(response).parse
namespace = "http://xml-looser.com/test"
daten = document.find('//item', namespace)
print "Anzahl der Datensätze : ",daten.size,"\n"
print daten[0],"Wert aus den Knoten : ",daten[0].content,"\n"
print daten[1],"Wert aus den Knoten : ",daten[1].content,"\n"

# =>Anzahl der Datensätze : 2
# =><item>wert1</item>Wert aus den Knoten : wert1
# =><item>wert2</item>Wert aus den Knoten : wert2
1
2
#Der Spezialfall xmlns="http://xml-looser.com/test"
<source>