![]() |
XML Problem
Hallo
Habe folgendes problem mit der speicherung eines XML files Ich arbeite mit Delphi 2006, MSXML 4.0 und Win XP. Nach dem Import eines csv File wird es in ein xml gepeichert mit folgenden Code schreibe ich das xml
Delphi-Quellcode:
und bekomme folgenden xml inhalt
xmlDoc := CoDOMDocument40.Create;
//xmlDoc.setProperty('NewParser', True); if not FileExists(fAppPath + Databasename) then begin xmlDoc.loadXML('<?xml version="1.0"?><Produktion/>'); end else xmlDoc.load(fAppPath + Databasename); if xmlDoc.parseError.errorCode <> 0 then begin MessageDlg('Die XML Datei ist nicht korrekt!',mtError,[mbOK],0); end; NewProduktion := xmlDoc.createElement('Produktion'); NewSub := xmlDoc.createElement('Datum'); NewSub.text := ZDatum; NewProduktion.appendChild(NewSub); NewSub := xmlDoc.createElement('Uhrzeit'); NewSub.text := ZZeit; NewProduktion.appendChild(NewSub); NewSub := xmlDoc.createElement('PLZ'); NewSub.text := '2320'; NewProduktion.appendChild(NewSub); NewSub := xmlDoc.createElement('UserID'); NewSub.text := 'uXXXXX'; NewProduktion.appendChild(NewSub); NewSub := xmlDoc.createElement('Eingang'); NewSub.text := '008'; NewProduktion.appendChild(NewSub); NewSub := xmlDoc.createElement('Produktkennzeichen'); NewSub.text := '?'; NewProduktion.appendChild(NewSub); NewSub := xmlDoc.createElement('Code1'); NewSub.text := (exparr[4]); NewProduktion.appendChild(NewSub); NewSub := xmlDoc.createElement('Code2'); NewSub.text := (exparr[2]); NewProduktion.appendChild(NewSub); NewSub := xmlDoc.createElement('Gewicht'); NewSub.text := (exparr[7]); NewProduktion.appendChild(NewSub); NewSub := xmlDoc.createElement('StatusID'); NewSub.text := '?'; NewProduktion.appendChild(NewSub); xmlDoc.documentElement.appendChild(NewProduktion); xmlDoc.save(fAppPath + Databasename); <?xml version="1.0" ?> - <Produktion> - <Produktion> <Datum>26.07.2007</Datum> <Uhrzeit>15:45:01</Uhrzeit> <PLZ>2320</PLZ> <UserID>uXXXXX</UserID> <Eingang>008</Eingang> <Produktkennzeichen>?</Produktkennzeichen> <Code1>AA00101367022830</Code1> <Code2>000000203709371000000</Code2> <StatusID>?</StatusID> </Produktion> - <Produktion> <Datum>26.07.2007</Datum> <Uhrzeit>15:45:01</Uhrzeit> <PLZ>2320</PLZ> <UserID>uXXXXX</UserID> <Eingang>008</Eingang> <Produktkennzeichen>?</Produktkennzeichen> <Code1>AA00101367234560</Code1> <Code2>000000203709371876540</Code2> <StatusID>?</StatusID> </Produktion> </Produktion> wie stelle ich es an das der xml inhalt so gespeichert wird <?xml version="1.0" ?> - <Produktion> <Produktion Datum="20.07.2007" Uhrzeit="15:05:00" PLZ="2320" UserID="uXXXXX" Eingang="008" Produktkennzeichen="?" Code1="AA700471" Code2="0000108300875960" StatusID="?" /> <Produktion Datum="20.07.2007" Uhrzeit="15:05:14" PLZ="2320" UserID="uXXXXX" Eingang="008" Produktkennzeichen="?" Code1="AA005320" Code2="0000108300875977" StatusID="?" /> </Produktion> ebenso sollte wenn z.b. Code1 keine Zeichen enthält dieser nicht im xml enthalten sein vielen dank lg pumba |
Re: XML Problem
Hallo pumba,
wenn du statt der Unterelemente lieber Attribute erzeugen möchtest, dann ist - vielleicht auch aus anderen Gründen - dieser Thread bestimmt hilfreich für dich: ![]() Vielleicht solltest du auch dein Schema nochmal überdenken. Produktion als Unterelement von Produktion finde ich nicht sehr elegant. Oft fällt die Entscheidung Element oder Attribut schwer, aber eine simple Regel hilft da ganz gut: Wenn du Informationen hast, die ein Objekt originär beschreiben, dann mache diese Informationen zu Unterelementen. Handelt es sich eher um Steuerinformationen, dann speichere sie als Attribut. Grüße vom marabu |
Re: XML Problem
du willst die daten als "attribute" speichern.
erzeuge den knoten. dann kannst du mit
Delphi-Quellcode:
die daten setzen.
knoten.setattribute('feld', 'wert');
|
Re: XML Problem
Danke für die schnellen Antworten
Leider wird mir das schema vorgeschrieben die ausgabe muss so erstellt werden. <?xml version="1.0" ?> - <Produktion> <Produktion Datum="20.07.2007" Uhrzeit="15:05:00" PLZ="2320" UserID="uXXXXX" Eingang="008" Produktkennzeichen="?" Code1="AA700471" Code2="0000108300875960" StatusID="?" /> <Produktion Datum="20.07.2007" Uhrzeit="15:05:14" PLZ="2320" UserID="uXXXXX" Eingang="008" Produktkennzeichen="?" Code1="AA005320" Code2="0000108300875977" StatusID="?" /> </Produktion> werde mal suchen ob ich was finde wie man knoten erstellt und attribute speichert vielen dank |
Re: XML Problem
Hallo Pumba,
beim Stöbern im XML-Forum der DP hast du ja jetzt schon einige Code-Beispiele gesehen. Das Erzeugen von Elementen wird im von dir gezeigten Code über die Methode createElement() erledigt. Und die Methode setAttribute() hast du jetzt auch schon im Einsatz gesehen. Das Ausklammern von Werten ist auch recht einfach:
Delphi-Quellcode:
Oder auf Attribute umgestellt:
// ..
if exparr[4] <> '' then begin NewSub := xmlDoc.createElement('Code1'); NewSub.text := (exparr[4]); NewProduktion.appendChild(NewSub); end; // ...
Delphi-Quellcode:
Freundliche Grüße
// ..
if exparr[4] <> '' then NewProduktion.setAttribute('Code1', exparr[4]); // ... |
Re: XML Problem
Hallo marabu
ich habe setAttribute nicht in meiner auswahl? l.g pumba |
Re: XML Problem
Welchen Typ hat denn NewProduktion?
|
Re: XML Problem
NewProduktion hat IXMLDOMNode
|
Re: XML Problem
Ich hätte NewProduktion gleich als IXMLDOMElement deklariert, dann musst du dir nicht erst das passende Interface besorgen:
Delphi-Quellcode:
Man kann natürlich auch mit IXMLNode arbeiten, aber dann wird der Ausdruck etwas länger ...
with NewProduktion as IXMLDOMElement do
setAttribute('Code1', exparr[4]); Nur der Vollständigkeit halber:
Delphi-Quellcode:
NewProduktion.attributes.setNamedItem(xmlDoc.createAttribute('Code1')).text := exparr[4];
|
Re: XML Problem
SUPER Danke marabu
es funkt vielen vielen dank ist echt das beste delphi forum l.g. Pumba |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz