AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

XML Problem

Ein Thema von Pumba · begonnen am 29. Jul 2007 · letzter Beitrag vom 29. Jul 2007
Antwort Antwort
Pumba

Registriert seit: 28. Jun 2004
32 Beiträge
 
Delphi 2005 Enterprise
 
#1

XML Problem

  Alt 29. Jul 2007, 15:00
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:
 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);
und bekomme folgenden xml inhalt

<?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
  Mit Zitat antworten Zitat
marabu

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

Re: XML Problem

  Alt 29. Jul 2007, 15:28
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: attribute die ich gar nicht explizit erstellt habe.

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
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#3

Re: XML Problem

  Alt 29. Jul 2007, 15:32
du willst die daten als "attribute" speichern.

erzeuge den knoten. dann kannst du mit
knoten.setattribute('feld', 'wert'); die daten setzen.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Pumba

Registriert seit: 28. Jun 2004
32 Beiträge
 
Delphi 2005 Enterprise
 
#4

Re: XML Problem

  Alt 29. Jul 2007, 15:50
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
  Mit Zitat antworten Zitat
marabu

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

Re: XML Problem

  Alt 29. Jul 2007, 16:04
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:
// ..
  if exparr[4] <> 'then
  begin
    NewSub := xmlDoc.createElement('Code1');
    NewSub.text := (exparr[4]);
    NewProduktion.appendChild(NewSub);
  end;
// ...
Oder auf Attribute umgestellt:

Delphi-Quellcode:
// ..
  if exparr[4] <> 'then
    NewProduktion.setAttribute('Code1', exparr[4]);
// ...
Freundliche Grüße
  Mit Zitat antworten Zitat
Pumba

Registriert seit: 28. Jun 2004
32 Beiträge
 
Delphi 2005 Enterprise
 
#6

Re: XML Problem

  Alt 29. Jul 2007, 16:29
Hallo marabu

ich habe setAttribute nicht in meiner auswahl?

l.g
pumba
  Mit Zitat antworten Zitat
marabu

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

Re: XML Problem

  Alt 29. Jul 2007, 16:43
Welchen Typ hat denn NewProduktion?
  Mit Zitat antworten Zitat
Pumba

Registriert seit: 28. Jun 2004
32 Beiträge
 
Delphi 2005 Enterprise
 
#8

Re: XML Problem

  Alt 29. Jul 2007, 16:49
NewProduktion hat IXMLDOMNode
  Mit Zitat antworten Zitat
marabu

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

Re: XML Problem

  Alt 29. Jul 2007, 16:53
Ich hätte NewProduktion gleich als IXMLDOMElement deklariert, dann musst du dir nicht erst das passende Interface besorgen:

Delphi-Quellcode:
with NewProduktion as IXMLDOMElement do
  setAttribute('Code1', exparr[4]);
Man kann natürlich auch mit IXMLNode arbeiten, aber dann wird der Ausdruck etwas länger ...

Nur der Vollständigkeit halber:

NewProduktion.attributes.setNamedItem(xmlDoc.createAttribute('Code1')).text := exparr[4];
  Mit Zitat antworten Zitat
Pumba

Registriert seit: 28. Jun 2004
32 Beiträge
 
Delphi 2005 Enterprise
 
#10

Re: XML Problem

  Alt 29. Jul 2007, 17:13
SUPER Danke marabu

es funkt

vielen vielen dank ist echt das beste delphi forum

l.g.
Pumba
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:36 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