AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi XML: MD5 erzeugen, dazu: whitespace entfernen

XML: MD5 erzeugen, dazu: whitespace entfernen

Ein Thema von weltaran · begonnen am 4. Sep 2007 · letzter Beitrag vom 5. Sep 2007
Antwort Antwort
Benutzerbild von weltaran
weltaran

Registriert seit: 12. Sep 2003
Ort: Offenburg
78 Beiträge
 
Delphi 5 Enterprise
 
#1

XML: MD5 erzeugen, dazu: whitespace entfernen

  Alt 4. Sep 2007, 22:03
Hallo Leute!

if (interessiert_an_Vorgeschichte=true)
begin

Ich muss einem Kunden regelmäßig XML dateien mit einem fest vorgegebenen format und (logisch) wechselndem Inhalt schicken. Zudem will ich einen MD5 hash erzeugen. Wenn der Kunde mir ein file zurückschickt und es beanstandet dann kann ich sofort sagen, ob er das file geändert hat oder nicht (die gesendeten files werden zwar archiviert aber man weiss ja nie...). Aber: Der Kunde könnte (aus Versehen?) das file "inhaltlich unrelevant" geändert haben (zusätzlicher whitespace ausserhalb der tags). Ergo ...

end else
begin

Ich will bei einem XML file den "content irrelevanten" whitespace entfernen, damit ich einen "content relavanten" md5 hash erzeugen kann! MSXML hat zwar signaturfunktionen, aber die laufen alle darauf raus, dass ich diese in die XML datei reinpacke, was ich nicht will/darf.

end


ciao
This is a signature virus. Copy me to help me spread!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: XML: MD5 erzeugen, dazu: whitespace entfernen

  Alt 4. Sep 2007, 22:14
Hi,

vielleicht musst du dich gar nicht um den white space kümmern, es würde ja schon eine Normierung des XML-Dokuments genügen. Dazu kannst du einfach per XSL-T eine identity transformation ohne white space preservation durchführen. Code-Beispiele dazu solltest du mit den entsprechenden Suchworten hier im Forum finden.

Gute Nacht
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: XML: MD5 erzeugen, dazu: whitespace entfernen

  Alt 4. Sep 2007, 22:16
Hmm, das "else" ist falsch, weil sonst hättest du mit der Vorgeschichte keine Frage...

Ansonsten: Die nicht relevanten WhiteSpaces sind dir doch auch egal, schliesslich würdest du sie auch nicht im Hashteil haben. Somit interessieren dich nur Änderungen in den Knoten bzw. Inhalten. Um dies zu verhindern, könntest du eine restriktive DTD schreiben, welche nur die genau in den jeweiligen Knoten eingetragenen Werte erlaubt. Damit kannst du Änderungen zwar nur soweit verhindern, als dass er die DTD mit verändern müsste.
Ob er dort Änderungen gemacht hat, kannst du aber einfach überprüfen, in dem du die zurück bekommene XML gegenüber deiner damaligen DTD überprüfst und du bekommst entsprechend angezeigt wo.

Aber es ist recht abstruss, aber du müsstest die XML Datei nicht ändern bzw. anpassen (ok, bis auf den DTD Link im Header).
  Mit Zitat antworten Zitat
Benutzerbild von weltaran
weltaran

Registriert seit: 12. Sep 2003
Ort: Offenburg
78 Beiträge
 
Delphi 5 Enterprise
 
#4

Re: XML: MD5 erzeugen, dazu: whitespace entfernen

  Alt 4. Sep 2007, 22:33
@Muetze:

Das ist mir schon zu aufwändig. Ich hab auch keine ahnung wie oft der Kunde die Struktur der von mir zu erstellenden XML Dokumente ändern wird (und ich damit eine von mir erstellte DTD zu pflegen habe).
Ich will einfach in eriner "Logdatei" (automatisiert) mitloggen: Timestamp, Filename, MD5-Hash. Ich will mich gar nicht mit XSL (noch keine Ahnung), DTD (Ahnung schon aber keine Lust) rumärgern müssen. So wie die Struktur der XML Datei derzeit ist wird da ohnehin noch viel gedreht werden. Der gute Kunde hat einfach seine bisherige Access-Datenbank(tabellen) in XML files "rausgehauen" mit nem haufen overhead drin, da grausst es einem - aber das nur am rande.

@marabu: so ne XSL-T transformation geht doch auch nur wenn ich die struktur der XML datei (im prinzip die nicht vorhandene DTD) kenne, oder? Wie gesagt: von XSL hab ich keine ahnung. Kann ich da definieren: hau mir das ganze file raus ohne whitespace, egal was für knotennamen ich da drin vorfinde?

Ciao
This is a signature virus. Copy me to help me spread!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: XML: MD5 erzeugen, dazu: whitespace entfernen

  Alt 4. Sep 2007, 22:53
Ja sicher kannst du, es wird ja bei einer identity transformation nur valides XML vorausgesetzt. Suche bitte mal nach diesem terminus technicus, da muss es mindestens einen Beitrag von mir zu geben. Muss jetzt ins Bettchen, bin sehr müde.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: XML: MD5 erzeugen, dazu: whitespace entfernen

  Alt 5. Sep 2007, 20:40
Hallo,

mit diesem Script solltest du dein XML-Dokument normieren können:

Code:
<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

   <xsl:output method="xml" version="1.0" encoding="utf-8" indent="no"/>
   <xsl:strip-space elements="*"/>

   <xsl:template match="/ | @* | node()">
      <xsl:copy>
         <xsl:apply-templates select="@* | node()"/>
      </xsl:copy>
   </xsl:template>

   <xsl:template match="comment()"/>

</xsl:stylesheet>
Wenn du nicht möchtest, dass neben leeren Textknoten auch Kommentare entfernt werden, dann entfernst du einfach das entsprechende xsl:template.

Die Anwendung der Methode transformNode() in Delphi ist nicht schwierig. Ein funktionierendes Beispiel findest du z.B. hier: klick

Freundliche Grüße
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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