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> |