AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [JS] XML-Parser-Klasse, wie realisieren?
Thema durchsuchen
Ansicht
Themen-Optionen

[JS] XML-Parser-Klasse, wie realisieren?

Ein Thema von Matze · begonnen am 23. Aug 2008 · letzter Beitrag vom 23. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

[JS] XML-Parser-Klasse, wie realisieren?

  Alt 23. Aug 2008, 15:59
Hallo,

da ich im Internet keine kleine XML-Parse-Klssse finden konnte (ich möchte wirklich nur parsen und keine Nodes verändern), dachte ich mir, ich schreibe selbst eine. Doch das ist absolutes Neuland für mich. Zum Parsen ist SAX deutlich schneller als DOM, habe ich herrausgefunden, aber für SAX muss man irgendwas importieren, daher denke ich, DOM wird auf jedenfall überall laufen.

Ich habe mir dann mal ein Tutorial angesehen, um die Grundlagen zu verstehen. Doch da hört's dann auch schon wieder auf. Dort gibt es das Beispiel:

Code:
try //Internet Explorer
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async="false";
  xmlDoc.loadXML(text);
  }
catch(e)
  {
  try //Firefox, Mozilla, Opera, etc.
    {
    parser=new DOMParser();
    xmlDoc=parser.parseFromString(text,"text/xml");
    }
  catch(e) {alert(e.message)}
  }
document.write("xmlDoc is loaded, ready for use");
Das Problem ist, dass ich gerne eine Klasse hätte, die ich so verwenden kann:

Code:
xml = new xmlDoc();
xml.LoadXMLString(...);
xml.ParseString();

foreach (xml.nodes as node)
{
  document.write(node.get_value('key'));
}
Nur so als Pseudo-Code. Ich verlange keinesfalls, dass ihr mir das schreibt. Ich hätte gerne ein paar Ansätze.
Der Code oben aus dem Tutorial ist sowas von verzettelt. Dieser lässt sich eigentlich gar nicht aufteilen in die Methoden zum Erzeugen des Objekts und in eine zum Parsen. Gerade im Firefox-Abschnitt findet beides irgendwie gleichzeitig statt.

Kann mir da jemand ein paar Hilfestellungen geben, wie ich zu meiner Wunsch-Klasse komme?

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#2

Re: [JS] XML-Parser-Klasse, wie realisieren?

  Alt 23. Aug 2008, 16:20

Das muss ich dir erklären?

1. Dokumentation für Microsoft.XMLDOM-ActiveX suchen
2. Dokumentation für JS-DOMParser() suchen
3. Wrapper-Klasse mit Browserweiche schreiben

Wo liegt jetzt das Problem?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: [JS] XML-Parser-Klasse, wie realisieren?

  Alt 23. Aug 2008, 16:26
Das Problem, das ich momentan habe, habe ich doch bereits geschrieben:
Diese Browserweiche ist in obigem Code enthalten, aber diese lässt sich nicht wirklich auseinander nehmen, da alles miteinander zusammenhängt. Ich möchte ja nicht gleich anfangen zu parsen.

Die ganzen Tutorials, die ich gesehen habe, machen es alle ähnlich wie oben und das finde ich recht schlampig.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#4

Re: [JS] XML-Parser-Klasse, wie realisieren?

  Alt 23. Aug 2008, 16:37
Ja, dann machs halt besser. Dass es natürlich hier und da ein wenig eng werden könnte, wenn die beiden Parserklassen zu unterschiedlich sind, ist klar...

Code:
class XmlParser {
  var useActiveX;
  var ParserObject;

  function XmlParser()
  {
    useActiveX = true;
 
    try //Internet Explorer
   {
     xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
     xmlDoc.async="false";
     ParserObject = xmlDoc;
   }
   catch(e)
   {
     useActiveX = false;
   
     try //Firefox, Mozilla, Opera, etc.
       {
       parser=new DOMParser();
       ParserObject = parser;
       }
     catch(e) {alert(e.message)}
   } 
  }
 
  function load(var contents)
  {
    if(useActiveX)
   {
     //selber coden...
   }
   else
   {
     //...macht schlau
   }
  }
}
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: [JS] XML-Parser-Klasse, wie realisieren?

  Alt 23. Aug 2008, 16:48
Ach dann muss man tatsächlich ständig überprüfen, welcher Browser verwendet wird und jedesmal anders reagieren.
Dass es da keinen Standard gibt, bzw. wieder ein Browser, der dermaßen aus dem Rahmen fällt, wundert mich wirklich.

Dann muss ich das wohl oder übel so machen. Danke, dann baue ich da mal drauf auf.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#6

Re: [JS] XML-Parser-Klasse, wie realisieren?

  Alt 23. Aug 2008, 17:09
Ja das is leider so... die Browserweiche wirst du immer irgendwo brauchen wenn du so exotische Sachen machen willst.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: [JS] XML-Parser-Klasse, wie realisieren?

  Alt 23. Aug 2008, 19:02
Also JS ist nichts für mich. *g* Was mache ich denn hier falsch:

Der Versuch, das ganze halbwegs in eine Klasse zu packen:

Code:
function XMLParser()
{
   var _xmlDoc = null;

   this.loadXMLDoc = function (XMLFile)
   {
      try //Internet Explorer
      {
         _xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
      }
      catch(e)
      {
         try //Firefox, Mozilla, Opera, etc.
         {
            _xmlDoc = document.implementation.createDocument('','',null);
         }
         catch(e) { alert(e.message) }
      }
      
      try
      {
         _xmlDoc.async = false;
         _xmlDoc.load(XMLFile);
      }
      catch(e) { alert(e.message) }
   }
   
   this.getNodes = function (Node)
   {
      return _xmlDoc.getElementsByTagName(Node);
   }

   this.getChildValue = function (Node, Child)
   {
      return Node.getElementsByTagName(Child);
   }
}
Das Hintergrundwissen habe ich hierher: loadXMLDoc(), Node-Funktionen.

Mein Aufruf ist dieser:

Code:
var my_xml = new XMLParser();
my_xml.loadXMLDoc('http://localhost/books.xml');
   
xml_nodes = my_xml.getNodes('book');

for (i = 0; i < xml_nodes.length; i++)
{
   title = my_xml.getChildValue(xml_nodes[i], 'title');
   author = my_xml.getChildValue(xml_nodes[i], 'author');
   alert(title + ' ' + author);
}
Die XML-Datei.
xml_nodes.length ist jedoch immer 0.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#8

Re: [JS] XML-Parser-Klasse, wie realisieren?

  Alt 23. Aug 2008, 19:49
und du bist dir sicher, dass sowohl das ActiveX als auch das DOM-Objekt, das du da auf sehr obskure Weise heraufbeschwörst, die Methode getElementsByTagName implementieren?

Das ganze liegt übrigens nicht an JS selbst, aber das dürfte dir klar sein...
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: [JS] XML-Parser-Klasse, wie realisieren?

  Alt 23. Aug 2008, 19:54
Zitat von DGL-luke:
und du bist dir sicher, dass sowohl das ActiveX als auch das DOM-Objekt, das du da auf sehr obskure Weise heraufbeschwörst, die Methode getElementsByTagName implementieren?
Laut dieser und vieler anderen Seiten ja. Wobei ich auch die Möglichkeit aus dem 1. Beitrag versucht habe, die ebenfalls nicht ging. Nun versuche ich gerade das hier, was aber auch noch nicht klappt.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: [JS] XML-Parser-Klasse, wie realisieren?

  Alt 23. Aug 2008, 20:28
Das war nun was größeres, so geht's:

Code:
var parser = new DOMParser();
var doc = parser.parseFromString(xml_text, "text/xml");
var nodes = doc.getElementsByTagName("book");

for (i = 0; i < nodes.length; i++)
{
    title = nodes[i].getElementsByTagName("title")[0].firstChild.nodeValue;
}
Aber danke für deine Mühe.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz