Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Alternative zum MSXML (https://www.delphipraxis.net/20455-alternative-zum-msxml.html)

philwo 18. Apr 2004 12:49


Alternative zum MSXML
 
Huhu,

ich code gerade an einem Programm, welches seine Daten in einer XML Datei speichert. Dazu habe ich bis vor kurzem noch den MSXML Parser benutzt. Wie der Zufall es wollte, installierte ich gerade eben das neue GExperts 1.20b1 und las die Readme (manchmal stehen da wirklich interessante Sachen drin ;)) und die erwähnten da eine Bibliothek namens OmniXML, womit sie ihre Daten speichern. *denk* XML ist immer gut, dachte ich mir und surfte zur angegebenen URL (www.omnixml.com) und stellte fest, dass das ein zur MSXML kompatibler Opensource (Mozilla Public License 1.1) XML Parser für Delphi ist. :) Ich habe ihn gerade in mein Programm eingebunden und das Portieren bestand einfach nur darin, aus den verwendeten Objekten wie IXMLDOMNode, IXMLDOMDocument2 sowas wie IXMLNode und IXMLDocument zu machen, außerdem wird das IXMLDocument nicht mit CoDOMDocument40.Create() sondern mit CreateXMLDoc() erstellt. Vielleicht interessiert es irgendjemanden, vielleicht als Alternative zu Microsoft Produkten, vielleicht einfach als besserer XML-Parser (jedenfalls ist er auf den ersten Blick besser, kann jedenfalls mehr). Ah, bevor ich es vergesse: Die hier oft gestellte Frage, wie man denn die XML-Dokumente "schön" speichern kann, lässt sich damit auch lösen: Aus
Code:
xmldoc.save(strFileName);
wird
Code:
xmldoc.save(strFileName, ofIndent);
. :)

Bis denn,
Philipp

CalganX 18. Apr 2004 13:05

Re: Alternative zum MSXML
 
Hi Philipp,
wie läuft das ganze denn? Ist das komplett eigenständig, oder baut das auf einem anderen Parser auf? Ist das ganze schnell, oder eher langsamer als MSXML?

Chris

CalganX 18. Apr 2004 13:16

Re: Alternative zum MSXML
 
Hi,
ich hab mir das gerade mal angesehen. So wie das aussieht, ist das eigentlich nur ein Aufsatz auf MSXML4. Ich werde es jetzt aber auf jedenfall mal ausprobieren, weil ich ja mal versuchen will meine Software fertigzustellen. ;)

Chris

philwo 18. Apr 2004 15:14

Re: Alternative zum MSXML
 
Nein, das stimmt nicht, es ist ein komplett selbstgecodeter Parser für XML. Es *kann* als Fundament auch den MSXML benutzen, falls der einem besser gefällt und dann fungiert OmniXML als Wrapper. Das ist aber natürlich nur zu empfehlen, falls der MSXML wirklich mal was besser können sollte... ;)

Philipp

PS. Hey, du bist ja schon wieder aus dem Urlaub zurück, Chris! :)

MathiasSimmack 18. Apr 2004 15:18

Re: Alternative zum MSXML
 
Sehr schön. Werde ich mir auch gleich mal anschauen. :)

CalganX 18. Apr 2004 15:26

Re: Alternative zum MSXML
 
Hi,
Zitat:

Zitat von philwo
Nein, das stimmt nicht, es ist ein komplett selbstgecodeter Parser für XML. Es *kann* als Fundament auch den MSXML benutzen, falls der einem besser gefällt und dann fungiert OmniXML als Wrapper. Das ist aber natürlich nur zu empfehlen, falls der MSXML wirklich mal was besser können sollte... ;)

Hm... :? Irgendwie ist mir das ganze durchaus suspekt. Nun gut. Scheinbar funktioniert es. Mal sehen ob es sich auch in der Praxis durchsetzen kann.

Aber dann eine Frage: wenn ich OmniXML verwenden würde, müsste ich dazu dann kein MS XML mitliefern?

Zitat:

Zitat von philwo
PS. Hey, du bist ja schon wieder aus dem Urlaub zurück, Chris! :)

Jepp, kann ja nicht ewig weg sein. :(

Chris

MathiasSimmack 18. Apr 2004 16:14

Re: Alternative zum MSXML
 
Zitat:

Zitat von Chakotay1308
Irgendwie ist mir das ganze durchaus suspekt.

Warum? Es macht immerhin einen guten Eindruck, und die Umlernphase (wenn man bisher nur mit MS-XML gearbeitet hat) ist recht kurz.

Zitat:

Aber dann eine Frage: wenn ich OmniXML verwenden würde, müsste ich dazu dann kein MS XML mitliefern?
Ich denke: Nein.

Aber hey, eins kann OmniXML noch nicht: XML-Code umwandeln. Aus dieser Datei ("links.xml")
Code:
<?xml version="1.0"?>
<?xml-stylesheet href="links.xsl" type="text/xsl"?>
<links>
  <link href="http://www.delphipraxis.net">Delphi-PRAXiS</link>
  <link href="http://www.delphi-forum.de">Delphi-Forum</link>
  <link href="http://www.csd-software.net">CSD-Software</link>
  <link href="http://www.luckie-online.de">luckie-online</link>
</links>
wird dann XSL-Stylesheet/Transform ("links.xsl")
Code:
<?xml version="1.0"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" encoding="windows-1252"
  doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" indent="no"/>

<xsl:template match="/">
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="links">
  <html>
    <head>
      <title>Links</title>
    </head>
    <body>
      <xsl:if test="count(child::*)&gt;0">
        <table border="0" width="100%" style="border:#000000 1px solid;">
          <xsl:apply-templates/>
        </table>
      </xsl:if>
    </body>
    </html>
</xsl:template>

<xsl:template match="link">
  <xsl:if test="@href!=''">
    <tr><td>
      <a>
        <xsl:attribute name="href"><xsl:value-of select="@href"/></xsl:attribute>
        <xsl:attribute name="target">_blank</xsl:attribute>
        <xsl:apply-templates/>
      </a>
    </td></tr>
  </xsl:if>
</xsl:template>

</xsl:stylesheet>
ein HTML-Dokument. Entweder via IE oder auch mit folgendem Delphi-Code (unter Benutzung des MS-XML-Parsers):
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  xsldoc,
  xmldoc : DomDocument40;
begin
  // XML-Dokument erzeugen, ...
  xmldoc := CoDomDocument40.Create;
  if(xmldoc <> nil) then
  try
    xmldoc.async := true;
    xmldoc.resolveExternals := true;
    xmldoc.preserveWhiteSpace := true;

    // ... & laden
    xmldoc.load('links.xml');

    // XSL-Stylesheet/Transform erzeugen, ...
    xsldoc := CoDomDocument40.Create;
    if(xsldoc <> nil) then
    try
      // ... & laden
      xsldoc.load('links.xsl');

      // XML-Code mit Hilfe der XSL-Datei
      // in HTML-Code transformieren
      ShowMessage(
        xmldoc.transformNode(xsldoc.documentElement)
      );
    finally
      xsldoc := nil;
    end;

  finally
    xmldoc := nil;
  end;
end;

philwo 18. Apr 2004 18:37

Re: Alternative zum MSXML
 
Chris, ruhig Blut! ;)
Nur weil es neu ist, ist es ja nicht schlecht. Ich wette, der Microsoft Parser hat mehr Bugs als OmniXML ;) und okay, wenn einige Features fehlen, dann kann man den Entwickler ja fragen (das ganze sieht nämlich ziemlich aktiv aus). :)
Durchsetzen? Es ist ganz einfach eine andere Implementation eines Standards, eine recht gute würde ich mal sogar sagen, da muss sich nichts durchsetzen. :) Entweder man benutzt das, oder halt den MSXML, oder noch etwas anderes, ich denke mal, alles hat seine Vor- und Nachteile. Nein, man muss den MSXML nicht mitliefern, OmniXML ist davon unabhängig und hat so gesehen nichts damit zu tun, außer, dass es damit quasi Source-Kompatibel ist. :) Das ist für mich irgendwo schon ein ziemliches Argument, immerhin ist das Viech von MS rund 1 MByte groß und wenn ich mein Programm quasi einfach nur neukompilieren muss um eine (schlankere, schnellere, bessere, sonstige ?) Implementierung direkt integriert zu haben, dann ist das doch ziemlich gut, finde ich. :)

Mathias: Ja, scheint so, als wäre der ganze XSL-Kram noch nicht implementiert ... :-/ Naja, ich hab das noch nie benutzt, aber ich schicke dem Entwickler mal eine Mail, ob er plant, das noch einzubauen. :) Zum "Selbercoden" ist das wohl etwas viel, ist ja keine Funktion, die man mal eben so einbauen kann, ...

Philipp

MathiasSimmack 18. Apr 2004 19:10

Re: Alternative zum MSXML
 
Ich hab´s auch bloß durch mein Prüfprogramm bemerkt. Das nehme ich eigentlich, um nach Fehlern zu suchen. Sprich: es lädt die Datei, und der Parser meldet mir dann evtl. Fehler. Und da war noch ein Stückchen Code drin, dass (sofern die XSL-Datei vorhanden war) einen Knoten eben umgewandelt hat.

Ansonsten wär´s mir auch nicht aufgefallen.

Fellmer Lloyd 1. Jun 2004 10:19

Re: Alternative zum MSXML
 
Hallo.

Ich habe eine Frage zu Omnixml: unterstützt der Parser auch DTDs?

Ist vieleicht eine komische Frage, aber ich habe bis jetzt noch keinen XML-parser verwendet, ich kenne nur die Theorie von XML und DTDs (Syntax, Regeln, Formatierung usw.).


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:14 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf