Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   XML-Datei mit dtd Datei darstellen (https://www.delphipraxis.net/20508-xml-datei-mit-dtd-datei-darstellen.html)

Luckie 20. Apr 2004 11:40

Re: XML-Datei mit dtd Datei darstellen
 
Und schon wieder was gelernt. Jetzt müsste ich auch in der Lage sein da etwas ranrumzuschrauben. ;)

MathiasSimmack 20. Apr 2004 11:59

Re: XML-Datei mit dtd Datei darstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
*hi hi* Du kannst ja bei Gelegenheit mal einen Blick in das Archiv im Anhang werfen. Das war harte Arbeit *schwitz* ... ;)

Aber um auf dein Thema zurückzukommen: Ich habe bisher keine Möglichkeit gefunden, eine externe DTD nachträglich in ein XML-Dokument einzufügen. Mit Delphi, meine ich. (s. hier). Na ja, den Tipp von morbo müsste ich vielleicht noch ausprobieren.

MathiasSimmack 20. Apr 2004 13:51

Re: XML-Datei mit dtd Datei darstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
@Luckie: Es gibt noch eine Möglichkeit der Validierung mit einem XSD-Schema. Das ist auch eine XML-Datei, die die gleiche Aufgabe wie die DTD hat, aber wohl (laut PSDK und W3C) flexibler sein soll.


Der Vorteil: Die Datei muss nicht in der XML-Adressdatenbank angegeben werden, sondern das Programm könnte die Validierung mit dem so genannten "schema cache" durchführen. Das heißt, die XSD-Datei wird wie eine XML-Datei geladen und dann an das XML-Objekt der Adressendatei übergeben. Wenn du die dann lädtst, findet der Parser ebenfalls Fehler. Ganz so wie bei der DTD. Man könnte also das XSD-Schema mit dem Programm ausliefern, oder meinetwegen auch auf dem Server ablegen.

Und du kannst sogar die Typen angeben, bspw.:
Code:
<xsd:element name="HighestID" type="xsd:decimal"/>
Würde in der XML-Datei jetzt stehen:
Code:
<HighestID>abc</HighestID>
dann schimpft der Parser:
Zitat:

Fehler beim Analysieren von 'abc' als decimal-Datentyp.
Das Element 'HighestID' hat gemäß seinem Datentyp einen ungültigen Wert.
Der Nachteil: Es läuft auf Namespaces hinaus. Zumindest ist das mein momentaner Eindruck als totaler XSD-Laie. Damit das Schema auch Fehler findet, muss die XML-Datei ein bisschen erweitert werden, bspw.
Code:
<[b]x[/b]:adressdb xmlns:[b]x[/b]="urn:adressdb">
 
</[b]x[/b]:adressdb>
(Die Angaben kann man IMHO frei wählen, aber dennoch: ) Mal gucken ob´s nicht noch einfacher geht. Vielleicht ist ja auch wer hier, der sich mit XSD auskennt?


Edit: Ich glaube ich hab´s (s. Anhang). ;)

Luckie 21. Apr 2004 04:47

Re: XML-Datei mit dtd Datei darstellen
 
So. Ich habe es jetzt geschaft die "Direktwahl" der XML-Datei mit xsl:sort zu sortieren:
XML-Code:


[b]Direktwahl[/b]:


          <xsl:for-each select="Kontakt">
          <xsl:sort select="concat(Name, Vorname)">
          </xsl:sort>
            <!-- für den Fall, dass es mehrere identische Namen gibt
                 wird noch die aktuelle Position in die Sprungmarke
                 eingefügt -->
            <a href="#{Vorname}_{Name}:{position()}">
              <xsl:value-of select="Name"/> <xsl:value-of select="Vorname"/> <xsl:value-of select="Firma"/>
            </a>


          </xsl:for-each>
Nur leider klappen dann nicht mehr alle Links. Mathias, weißt du was da los ist und wie man das beheben kann? Eine alternative Möglichkeit zum sortieren, würde ich auch akzeptieren.

MathiasSimmack 21. Apr 2004 06:57

Re: XML-Datei mit dtd Datei darstellen
 
Na ja, der Anker auf der Seite setzt sich doch zusammen aus dem Vornamen, dem Namen und der Position, also bspw.
Code:
#Mathias_Simmack:666
Durch die Sortierung
Code:
<xsl:if test="count(child::Kontakt)&gt;0">
 

[b]Direktwahl[/b]:


    <xsl:for-each select="Kontakt">
      <xsl:sort select="concat(Name, Vorname)"/>
      <a href="#{Vorname}_{Name}:{position()}">
        <xsl:value-of select="Name"/> <xsl:value-of select="Vorname"/> <xsl:value-of select="Firma"/>
      </a>


    </xsl:for-each>
 
</p><hr size="1"/>
</xsl:if>
ändert sich aber die Reihenfolge der Knoten und damit natürlich auch deren Position. Du musst also beim Aufruf des Templates "Kontakt" auch noch mal für die gleiche Sortierung sorgen
Code:
<xsl:apply-templates select="Kontakt">
  <xsl:sort select="concat(Name, Vorname)"/>
</xsl:apply-templates>

Luckie 21. Apr 2004 10:10

Re: XML-Datei mit dtd Datei darstellen
 
Ok. Ich verstecke mich dann für den Rest des Vormittages únter dem Schreibtisch. Falls mich jemand sucht, ich bin in der Ecke hinten links. :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:34 Uhr.
Seite 2 von 2     12   

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