AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Attribute die ich gar nicht explizit erstellt habe
Thema durchsuchen
Ansicht
Themen-Optionen

Attribute die ich gar nicht explizit erstellt habe

Offene Frage von "Svenkan"
Ein Thema von cherry · begonnen am 14. Mai 2007 · letzter Beitrag vom 22. Sep 2007
Antwort Antwort
Seite 2 von 3     12 3      
marabu

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

Re: Attribute die ich gar nicht explizit erstellt habe

  Alt 26. Mai 2007, 18:26
Ich würde es wahrscheinlich so machen:

Delphi-Quellcode:
var
  // ...
  nsDef: string;
  nPackage, nSender, nUser: IXMLDOMNode;
begin
  nsDef := 'http://innosolv.ch/namespace/isag';
  // ...

  root := xmlDoc.createElement('subjectData');
  with root as IXMLDOMElement do
  begin
    setAttribute('xmlns:xsd', 'http://www.w3.org/2001/XMLSchema');
    setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
    setAttribute('xmlns', nsDef);
  end;

  // ...
  
  nPackage := root.appendChild(xmlDoc.createNode(NODE_ELEMENT, 'package', nsDef));
  // ...
end;
Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#12

Re: Attribute die ich gar nicht explizit erstellt habe

  Alt 27. Mai 2007, 10:02
@Marabu

VIELEN DANK, hat bestens geklappt. Ich hab meine Datei jetzt so erzeugt, ist das nun Korrekt oder
würdest du noch etwas anders machen. Ich werde diese Prozedur dann in eine DLL packen, so dass ich sie später
auch für andere Programme verwenden kann...

Delphi-Quellcode:
// XML DATEI ERSTELLEN
procedure TForm1.Act_create_XMLExecute(Sender: TObject; filename: String; vUserName,
  vSwSystemID, vSwSystemName, vSwSystemID_2, vTransactionID, vTransactionCase,
  vTransactionDate, vTransactionAcknowledge, vTransactionDescription,
  vMutationType, vReferenceID, vReferenceID2, vReferenceType, vExtPosID,
  vEventID, vRedundancyCheck, vName, vLegalForm, aLegalForm, vFormationType,
  aFormationType, vFormationDate, vAddressReferenceID, vAddressTypeOf,
  aAddressTypeOf, vAdditionalStreetPosition, vValidFrom, vNote, vStreet,
  vAdditionalStreet, aAdditionalStreet, vHouseNumber,
  vAdditionalHouseNumber, aAdditionalHouseNumber, vCityID, vZipCodeID,
  vZipCode, vTown, vCountry, aCountry, vLocality, aLocality, vZipCodeAddOn:
  WideString);
var
  xmlDoc : msDOMDocument;
  instr: IXMLDOMProcessingInstruction;
  nsDef: WideString;
  root, nPackage, nSender, nUser, nUserName, nSwSystemID, nSwSystemName,
  nReceiver, nSwSystemID_2, nTransaction, nTransactionID, nTransactionCase,
  nTransactionDate, nTransactionAcknowledge, nTransactionDescription,
  nSubjectEvent, nMutationType, nReferenceID, nReferenceID2, nReferenceType,
  nExtPosID, nEventID, nRedundancyCheck, nSubject, nName, nNotNaturalPerson,
  nLegalForm, nFormationType, nFormationDate, nAddress, nAddressReferenceID,
  nAddressTypeOf, nAdditionalStreetPosition, nValidFrom, nNote, nPlace, nStreet,
  nAdditionalStreet, nHouseNumber, nAdditionalHouseNumber, nCity, nCityID,
  nZipCodeID, nZipCode, nTown, nCountry, nLocality, nZipCodeAddOn: IXMLDOMNode;
begin
  nsDef := 'http://innosolv.ch/namespace/isag';

  // Microsoft Document Object Model - Document erstellen
  xmlDoc := CoDOMDocument40.Create;

  // (Rootnode) Wurzelelement erzeugen
  root := xmlDoc.createElement('subjectData');

  // Prolog mit Steueranweisungen (Processing instructions)
  instr := xmlDoc.createProcessingInstruction('xml', 'version="1.0" encoding="utf-8"');
  xmlDoc.appendChild(instr);

  // Rootelement mit Namespaces definieren
  with root as IXMLDOMElement do
  begin
    setAttribute('xmlns:xsd', 'http://www.w3.org/2001/XMLSchema');
    setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchame-instance');
    setAttribute('xmlns', nsDef);
  end;

  // Rootelement an Dokument anfügen
  xmlDoc.appendChild(root);

  // Nachfolgend wird der ganze Baum mit allen relevanten Namespaces erstellt.

    nPackage := root.appendChild(xmlDoc.createNode(NODE_ELEMENT,'package',nsDef));
      nSender := nPackage.appendChild(xmlDoc.createNode(NODE_ELEMENT,'sender',nsDef));
        nUser := nSender.appendChild(xmlDoc.createNode(NODE_ELEMENT,'user',nsDef));
          nUserName := nUser.appendChild(xmlDoc.createNode(NODE_ELEMENT,'userName',nsDef));
          nUserName.text := vUserName;

        nSwSystemID := nSender.appendChild(xmlDoc.createNode(NODE_ELEMENT,'swSystemID',nsDef));
        nSwSystemID.text := vSwSystemID;
        nSwSystemName := nSender.appendChild(xmlDoc.createNode(NODE_ELEMENT,'swSystemName',nsDef));
        nSwSystemName.text := vSwSystemName;

      nReceiver := nPackage.appendChild(xmlDoc.createNode(NODE_ELEMENT,'receiver',nsDef));
        nSwSystemID_2 := nReceiver.appendChild(xmlDoc.createNode(NODE_ELEMENT,'swSystemID',nsDef));
        nSwSystemID_2.text := vSwSystemID_2;

      nTransaction := nPackage.appendChild(xmlDoc.createNode(NODE_ELEMENT,'transaction',nsDef));
        nTransactionID := nTransaction.appendChild(xmlDoc.createNode(NODE_ELEMENT,'transactionID',nsDef));
        nTransactionID.text := vTransactionID;
        nTransactionCase := nTransaction.appendChild(xmlDoc.createNode(NODE_ELEMENT,'transactionCase',nsDef));
        nTransactionCase.text := vTransactionCase;
        nTransactionDate := nTransaction.appendChild(xmlDoc.createNode(NODE_ELEMENT,'transactionDate',nsDef));
        nTransactionDate.text := vTransactionDate;
        nTransactionAcknowledge := nTransaction.appendChild(xmlDoc.createNode(NODE_ELEMENT,'transactionAcknowledge',nsDef));
        nTransactionAcknowledge.text := vTransactionAcknowledge;
        nTransactionDescription := nTransaction.appendChild(xmlDoc.createNode(NODE_ELEMENT,'transactionDescription',nsDef));
        nTransactionDescription.text := vTransactionDescription;

    nSubjectEvent := root.appendChild(xmlDoc.createNode(NODE_ELEMENT,'subjectEvent',nsDef));
      nMutationType := nSubjectEvent.appendChild(xmlDoc.createNode(NODE_ELEMENT,'mutationType',nsDef));
      nMutationType.text := vMutationType;
      nReferenceID := nSubjectEvent.appendChild(xmlDoc.createNode(NODE_ELEMENT,'referenceID',nsDef));
      nReferenceID.text := vReferenceID;
      nReferenceID2 := nSubjectEvent.appendChild(xmlDoc.createNode(NODE_ELEMENT,'referenceID2',nsDef));
      nReferenceID2.text := vReferenceID;
      nReferenceType := nSubjectEvent.appendChild(xmlDoc.createNode(NODE_ELEMENT,'referenceType',nsDef));
      nReferenceType.text := vReferenceType;
      nExtPosID := nSubjectEvent.appendChild(xmlDoc.createNode(NODE_ELEMENT,'extPosID',nsDef));
      nExtPosID.text := vExtPosID;
      nRedundancyCheck := nSubjectEvent.appendChild(xmlDoc.createNode(NODE_ELEMENT,'redundancyCheck',nsDef));
      nRedundancyCheck.text := vRedundancyCheck;

      nSubject := nSubjectEvent.appendChild(xmlDoc.createNode(NODE_ELEMENT,'subject',nsDef));
        nName := nSubject.appendChild(xmlDoc.createNode(NODE_ELEMENT,'name',nsDef));
        nName.text := vName;

        nNotNaturalPerson := nSubject.appendChild(xmlDoc.createNode(NODE_ELEMENT,'notNaturalPerson',nsDef));
          nLegalForm := nNotNaturalPerson .appendChild(xmlDoc.createNode(NODE_ELEMENT,'legalForm',nsDef));
          with nLegalForm as IXMLDOMElement do
          begin
            text := vLegalForm;
            setAttribute('rvcd', aLegalForm);
          end;
          nFormationType := nNotNaturalPerson .appendChild(xmlDoc.createNode(NODE_ELEMENT,'formationType',nsDef));
          with nLegalForm as IXMLDOMElement do
          begin
            text := vFormationType;
            setAttribute('rvcd', aFormationType);
          end;
          nFormationDate := nNotNaturalPerson .appendChild(xmlDoc.createNode(NODE_ELEMENT,'formationDate',nsDef));
          nFormationDate.text := vFormationDate;

        nAddress := nSubject.appendChild(xmlDoc.createNode(NODE_ELEMENT,'address',nsDef));
          nAddressReferenceID := nAddress.appendChild(xmlDoc.createNode(NODE_ELEMENT,'addressReferenceID',nsDef));
          nAddressReferenceID.text := vAddressReferenceID;
          nAddressTypeOf := nAddress.appendChild(xmlDoc.createNode(NODE_ELEMENT,'addressTypeOf',nsDef));
          with nAddressTypeOf as IXMLDOMElement do
          begin
            text := vAddressTypeOf;
            setAttribute('rvcd', aAddressTypeOf);
          end;
          nAdditionalStreetPosition := nAddress.appendChild(xmlDoc.createNode(NODE_ELEMENT,'additionalStreetPosition',nsDef));
          nAdditionalStreetPosition.text := vAdditionalStreetPosition;
          nValidFrom := nAddress.appendChild(xmlDoc.createNode(NODE_ELEMENT,'validFrom',nsDef));
          nValidFrom.text := vValidFrom;
          nNote := nAddress.appendChild(xmlDoc.createNode(NODE_ELEMENT,'note',nsDef));
          nNote.text := vNote;

          nPlace := nAddress.appendChild(xmlDoc.createNode(NODE_ELEMENT,'place',nsDef));
            nStreet := nPlace.appendChild(xmlDoc.createNode(NODE_ELEMENT,'street',nsDef));
            nStreet.text := vStreet;
            nAdditionalStreet := nPlace.appendChild(xmlDoc.createNode(NODE_ELEMENT,'additionalStreet',nsDef));
            with nAdditionalStreet as IXMLDOMElement do
            begin
              text := vAdditionalStreet;
              setAttribute('xsi:nil', aAdditionalStreet);
            end;
            nHouseNumber := nPlace.appendChild(xmlDoc.createNode(NODE_ELEMENT,'houseNumber',nsDef));
            nHouseNumber.text := vHouseNumber;
            nAdditionalHouseNumber := nPlace.appendChild(xmlDoc.createNode(NODE_ELEMENT,'additionalHouseNumber',nsDef));
            with nAdditionalHouseNumber as IXMLDOMElement do
            begin
              text := vAdditionalHouseNumber;
              setAttribute('xsi:nil', aAdditionalHouseNumber);
            end;

              nCity := nPlace.appendChild(xmlDoc.createNode(NODE_ELEMENT,'city',nsDef));
                nCityID := nCity.appendChild(xmlDoc.createNode(NODE_ELEMENT,'cityID',nsDef));
                nCityID.text := vCityID;
                nZipCodeID := nCity.appendChild(xmlDoc.createNode(NODE_ELEMENT,'zipCodeID',nsDef));
                nZipCodeID.text := vZipCodeID;
                nZipCode := nCity.appendChild(xmlDoc.createNode(NODE_ELEMENT,'zipCode',nsDef));
                nZipCode.text := vZipCode;
                nTown := nCity.appendChild(xmlDoc.createNode(NODE_ELEMENT,'town',nsDef));
                nTown.text := vTown;
                nCountry := nCity.appendChild(xmlDoc.createNode(NODE_ELEMENT,'country',nsDef));
                with nCountry as IXMLDOMElement do
                begin
                  text := vCountry;
                  setAttribute('rvcd', aCountry);
                end;
                nLocality := nCity.appendChild(xmlDoc.createNode(NODE_ELEMENT,'locality',nsDef));
                with nLocality as IXMLDOMElement do
                begin
                  text := vLocality;
                  setAttribute('xsi:nil', aLocality);
                end;
                nZipCodeAddOn := nCity.appendChild(xmlDoc.createNode(NODE_ELEMENT,'zipCodeAddOn',nsDef));

  // XML - Dokument wird gespeichert.
  xmlDoc.save(filename);

end;

Grüsse Cherry
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
marabu

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

Re: Attribute die ich gar nicht explizit erstellt habe

  Alt 27. Mai 2007, 12:12
Hallo Raphael,

eine Prozedur mit 180 Zeilen Quellcode und einer Signatur mit über 40 Parametern - nein, so würde ich es ganz sicher nicht machen. Die Signatur würde ich durch eine assoziative Liste (TStringList) minimieren und das XML-Dokument würde ich über ein oder mehrere Templates (TPageProducer) generieren.

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#14

Re: Attribute die ich gar nicht explizit erstellt habe

  Alt 29. Mai 2007, 07:23
@marabu...

Vielen Dank auch für deine zusätzlichen Tipps... die Parameterübergabe mit TStringList habe ich schon angepasst!
Aber mit der Verwendung von TPageProducer habe ich so meine Bedenken, ich hab noch nie was mit dieser Komponente gemacht, denkst du es wäre wirklich sinnvoll da ich die Dateien nur erstellen und nicht lesen muss.

Könntest du mir nich in groben Schritten beschreiben wie genau ich diese Komponenten in Bezug auf mein Problem verwenden muss¿
LG
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
marabu

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

Re: Attribute die ich gar nicht explizit erstellt habe

  Alt 29. Mai 2007, 09:29
Hallo Raphael,

Zitat von cherry:
... Aber mit der Verwendung von TPageProducer habe ich so meine Bedenken, ich hab noch nie was mit dieser Komponente gemacht, denkst du es wäre wirklich sinnvoll da ich die Dateien nur erstellen und nicht lesen muss. ...
Gerade das war der Grund für meine Überlegung.

Hier eine Andeutung für eine mögliche Vorgehensweise:

Delphi-Quellcode:
procedure TDemoForm.FormCreate(Sender: TObject);
begin
  Params := TStringList.Create;
  PageProducer.HTMLDoc.LoadFromFile(fnTemplate);
end;

procedure TDemoForm.Button1Click(Sender: TObject);
begin
  Params.Clear;
  Params.Values['userName'] := 'sa';
  ShowMessage(PageProducer.Content);
end;

procedure TDemoForm.PageProducerHTMLTag(Sender: TObject; Tag: TTag;
  const TagString: String; TagParams: TStrings; var ReplaceText: String);
begin
  case Tag of
    tgCustom: ReplaceText := Params.Values[TagString];
    else ReplaceText := Format('', [TagString])
  end;
end;
Im Template steht dann unter anderem so etwas:

XML-Code:
...
<userName><#userName></userName>
...
Das lässt sich nach Belieben verfeinern.

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#16

Re: Attribute die ich gar nicht explizit erstellt habe

  Alt 29. Mai 2007, 09:38
ok sieht auf den ersten Blick etwas kompliziert (ungwohnt) aus, würde ich aber mit angemessenem Aufwand
sicherlich auch irgendwann mal hinkriegen.

Sehe ich das aber richtig, damit die Sache einigermassen gut programmiert ist, muss ich das Template als
XML - Datei irgendwo abgespeichert haben?! denn sonst wäre es ja irgendwie auch nicht eine schöne Lösung
wenn das ganze Zeuchs nur "Virtuell" im Code als Vorlage dient. Verstehst du was ich mit diesem Kauderwelsch sagen will?

Und du persönlich würdes das so machen?

Ich denke eifach das eine zusätzliche XML - Datei (Template) irgendwie alles erschwert für eine weitere Verwendung, da ich beschlossen habe für meine XML - Erstellung den Code in eine DLL auszulagern.

Die DLL, weil ich noch tonnen weise XMLs mit der genau selben Struktur erstellen muss, nur die Werte ändern, nicht die Tags..

Dein Geheimtipp?

LG
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
marabu

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

Re: Attribute die ich gar nicht explizit erstellt habe

  Alt 29. Mai 2007, 10:45
Es ist nicht zwingend, dass du ein XML-Template aus einer Datei liest. Du kannst ein solches Template auch aus den Ressourcen der DLL einlesen. Und wenn der Aufbau des XML-Dokuments feststeht, dann ist ein Template ein naheliegender Ansatz. Du darfst dich auch nicht an Details meines Vorschlages klammern. Je nach dem woher deine Daten für die Population des Templates herkommen kann auch ein DB-gestützter Producer interessant sein.

Wahrscheinlich würde ich die Custom Tags das vollständige XML-Element erzeugen lassen - tags und attributes inklusive. In deinem Beispiel habe ich weder Rekursion noch Wiederholung gesehen, aber wenn das benötigt wird, dann würde ich mit verketteten Producern arbeiten.

Mache deine Gehversuche nicht am eigentlichen Projekt, sondern erstelle eine Machbarkeitsstudie, mit der du dich auf alle Eventualitäten vorbereitest und die du auch später noch als Testbett verwenden kannst, wenn unbedachte Fälle auftauchen sollten.

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#18

Re: Attribute die ich gar nicht explizit erstellt habe

  Alt 29. Mai 2007, 11:59
@marabu ein riesen grosses Dankeschön für dein Engagement.
Ich wünsche noch eine angenehme Woche!

THX A LOT
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Svenkan

Registriert seit: 10. Feb 2007
Ort: Bersenbrück
547 Beiträge
 
Delphi 7 Enterprise
 
#19

Re: Attribute die ich gar nicht explizit erstellt habe

  Alt 26. Jul 2007, 14:19
Ich benutze nun auf Anraten den Code von marabu.
Innerhalb des Programms werden die Tags auch übersetzt.
Wenn ich nun aber den Inhalt in eine HTM-Datei ausgebe, werden die Tags nicht ersetzt.

Beispiel:

Aus
Code:
</table>
<p align="right">
 <font class="font_klein">
Geschrieben mit VPlan v<#version> - [email="svenkan@gmx.de"]Sven Kannenberg[/email]</font></p>
</html>
soll

Code:
</table>
<p align="right">
 <font class="font_klein">
Geschrieben mit VPlan v2.0 - [email="svenkan@gmx.de"]Sven Kannenberg[/email]</font></p>
</html>
werden.

Es ist auch deklariert:

Delphi-Quellcode:
  Params:=TStringList.Create;
  PageProducer.HTMLDoc.LoadFromFile(ExtractFilePath(ParamStr(0))+'templates\vplan_a.vpt');
  Params.Clear;
  Params.Values['schule']:=schule;
  Params.Values['version']:=version;
Und im Programm (wenn man den Code über ShowMessage ausgeben lässt) funktioniert es auch wunderbar.
Muss ich noch etwa spezielles einfügen für die HTML-Ausgabe?
Sven Kannenberg
  Mit Zitat antworten Zitat
marabu

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

Re: Attribute die ich gar nicht explizit erstellt habe

  Alt 15. Aug 2007, 06:22
Hallo Sven,

ich habe deinen Beitrag leider erst jetzt entdeckt. Hast du dein Problem lösen können? Wenn nein, dann beschreibe bitte wie du die HTML-Ausgabe erstellst.

Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 14:24 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