Die Programmiersprache Ruby

Blog| Forum| Wiki  

Hauptseite

XML mit Ruby bearbeiten


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

Als Standard wurde REXML in Ruby integriert und ist in reinem Rubycode geschrieben.
Da die Auswertung von großen XML-Dateien zeitaufwendig ist wurden bessere, auf C oder C++ basierende Module entwickelt.
Z.B. Libxml und als weitere Verbesserung Nokogiri
Zudem wird im Modul Rexml der 'namespace' nicht richtig unterstützt.


Hinweis zur Installation
Mit Hilfe von Gemcutter, einer Onlineanwendung, kann die Version und das Betriebssystem ausgewählt werden.
Es wird auch angezeigt, welche Abhänigkeiten zu anderen Gems vorhanden sind die zum Installieren diese Gems benötigt werden.
Ein weiters Hilfsmittel ist ein Button zum Kopieren des Befehls in die Zwischenablage.
Diese Funktion erleichtert das Arbeiten über die Konsole.
Mit der rechten Maustaste kann die gespeicherte Information in die Konsole eingefügt und dann ausgeführt werden.

Unter Ruby 1.8.6-26 Windows
auf der Seite RubyForge rubygems-1.3.5.zip downloaden. Die Zipdatei in C:\ entpacken und dann in das Verzeichnis C:\rubygems-1.3.5 wechseln.
Danach 'ruby setup.rb' aufrufen und auf rubygems 1.3.5 updaten.
Im Gemcutter sieht man welche Module noch gebraucht werden.

zum Abschluss gem update --system eingeben

libxml 1.1.3 downloaden:
Da Libxml auf C Routinen zurückgreift, 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 Warnung im Programmteil builder.rb auf Zeile 272 ausgeben Diese 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>