Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi IXMLNode Präfixe setzen (https://www.delphipraxis.net/184575-ixmlnode-praefixe-setzen.html)

Back2Code 7. Apr 2015 15:21

IXMLNode Präfixe setzen
 
Hallo Leute das ist eine vorhandene XML Datei die mir so vorliegt:

Code:
<?xml version="1.0" encoding="iso-8859-1"?><reh:Reha xmlns:reh="http://www.vdek.com/xml-schema/REH/1.8">
  <reh:logische_Version>1.6.0</reh:logische_Version>
 <reh:KV>
 <reh:Kopfdaten>
  <kod:Erstellungsdatum_Uhrzeit xmlns:kod="http://www.vdek.com/xml-schema/KOD/1.2">2014-09-23T15:33:23</kod:Erstellungsdatum_Uhrzeit>
  <kod:Version xmlns:kod="http://www.vdek.com/xml-schema/KOD/1.2">1.2.0</kod:Version>
  <kod:Dateinummer xmlns:kod="http://www.vdek.com/xml-schema/KOD/1.2">000010</kod:Dateinummer>
 <kod:Identifikationsdaten xmlns:kod="http://www.vdek.com/xml-schema/KOD/1.2">
  <kod:IK_Absender>108018007</kod:IK_Absender>
  <kod:IK_Empfaenger>510800000</kod:IK_Empfaenger>
  <kod:IK-Kostentraeger>108018007</kod:IK-Kostentraeger>
  <kod:IK_Einrichtung>510800000</kod:IK_Einrichtung>
  </kod:Identifikationsdaten>
 <kod:Fall_ID_KV xmlns:kod="http://www.vdek.com/xml-schema/KOD/1.2">
  <kod:Krankenversichertennummer>I123456789</kod:Krankenversichertennummer>
  <kod:Versichertenstatus>50001</kod:Versichertenstatus>
  <kod:Kartengueltigkeit>1712</kod:Kartengueltigkeit>
  <kod:Fallnummer>01800000099988877</kod:Fallnummer>
  </kod:Fall_ID_KV>
    <reh:Dateinummer></reh:Dateinummer>
    </reh:Kopfdaten>
 <reh:Bewilligung>
 <bew:Admindaten xmlns:bew="http://www.vdek.com/xml-schema/BEW/1.5">
  <bew:Verarbeitungskennzeichen>10</bew:Verarbeitungskennzeichen>
  <bew:Version>1.5.0</bew:Version>
  <bew:LfdNr>01</bew:LfdNr>
  </bew:Admindaten>
 <bew:Fachliche_Daten xmlns:bew="http://www.vdek.com/xml-schema/BEW/1.5">
 <bew:Rehabilitand>
  <bew:Anrede>1</bew:Anrede>
 <bew:Name>
  <bty:Nachname xmlns:bty="http://www.vdek.com/xml-schema/BTY/1.2">Mustermann</bty:Nachname>
  <bty:Vorname xmlns:bty="http://www.vdek.com/xml-schema/BTY/1.2">Max</bty:Vorname>
  </bew:Name>
  <bew:Geschlecht>1</bew:Geschlecht>
  <bew:Geburtsdatum>1950-08-21</bew:Geburtsdatum>
 <bew:Adresse>
  <bty:Strasse xmlns:bty="http://www.vdek.com/xml-schema/BTY/1.2">Saonestr.</bty:Strasse>
  <bty:Hausnummer xmlns:bty="http://www.vdek.com/xml-schema/BTY/1.2">3</bty:Hausnummer>
  <bty:Wohnort xmlns:bty="http://www.vdek.com/xml-schema/BTY/1.2">Frankfurt</bty:Wohnort>
  <bty:PLZ xmlns:bty="http://www.vdek.com/xml-schema/BTY/1.2">60528</bty:PLZ>
  <bty:Laenderkennzeichen xmlns:bty="http://www.vdek.com/xml-schema/BTY/1.2">D</bty:Laenderkennzeichen>
  </bew:Adresse>
 <bew:Kommunikation>
  <bty:Telefon xmlns:bty="http://www.vdek.com/xml-schema/BTY/1.2">069/12345</bty:Telefon>
  </bew:Kommunikation>
  </bew:Rehabilitand>
 <bew:Kosteninformationen>
 <bew:Zuzahlung>
  <bew:Zuzahlungseinzug>2</bew:Zuzahlungseinzug>
  <bew:AnzahlTage>028</bew:AnzahlTage>
  <bew:Zuzahlungsbetrag>01000</bew:Zuzahlungsbetrag>
  </bew:Zuzahlung>
  </bew:Kosteninformationen>
 <bew:Rehainformationen>
  <bew:Rehaart>93</bew:Rehaart>
  </bew:Rehainformationen>
 <bew:Aufnahmedaten>
  <bew:IK_Krankenhaus>260612124</bew:IK_Krankenhaus>
  <bew:Behandlungsart>1</bew:Behandlungsart>
 <bew:Bewilligungsdiagnosen>
  <bew:Version_ICD>2014</bew:Version_ICD>
 <bew:Diagnose>
  <bty:Diagnosenschluessel xmlns:bty="http://www.vdek.com/xml-schema/BTY/1.2">M151</bty:Diagnosenschluessel>
  </bew:Diagnose>
  </bew:Bewilligungsdiagnosen>
 <bew:Aufnahmedaten>
  <bew:Erfolgt>N</bew:Erfolgt>
  <bew:Geplant>2014-10-05</bew:Geplant>
  </bew:Aufnahmedaten>
  <bew:Indikationsgruppe>SA</bew:Indikationsgruppe>
  </bew:Aufnahmedaten>
 <bew:Bewilligungsinformationen>
  <bew:Bewilligungsdatum>2014-09-23</bew:Bewilligungsdatum>
  <bew:Kostenzusage_gueltig_bis>2014-10-31</bew:Kostenzusage_gueltig_bis>
  </bew:Bewilligungsinformationen>
 <bew:Stationaerdaten>
  <bew:Behandlungsabschnitte>01</bew:Behandlungsabschnitte>
  <bew:bewilligte_Tage>020</bew:bewilligte_Tage>
  </bew:Stationaerdaten>
  </bew:Fachliche_Daten>
    <reh:Fachliche_Daten>
        <reh:Rehabilitand/>
      </reh:Fachliche_Daten>
    </reh:Bewilligung>
  </reh:KV>
  <reh:Papieranlage>N</reh:Papieranlage>
  </reh:Reha>
Ich versuche diese nachzubauen, scheitere aber derzeit noch an der Festlegung der Präfixe wie zb "reh: , bew:...".

Mein aktueller Output sieht so aus:

Code:

<?xml version="1.0"?>
<Reha xmlns="http://www.vdek.com/xml-schema/REH/1.8" xmlns:xsi="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.foo.com/Myxsd.xsd">
  <logische_Version>1.6.0</logische_Version>
  <KV reh:schemaLocation="http://www.foo.com/Myxsd.xsd">
    <Kopfdaten>
      <Erstellungsdatum_Uhrzeit>2014-09-23T15:33:23</Erstellungsdatum_Uhrzeit>
      <Version>1.2.0</Version>
      <Dateinummer></Dateinummer>
      <Identifikationsdaten>
        <IK_Absender>108018007</IK_Absender>
        <IK_Empfaenger>510800000</IK_Empfaenger>
        <IK-Kostentraeger>108018007</IK-Kostentraeger>
        <IK_Einrichtung>510800000</IK_Einrichtung>
      </Identifikationsdaten>
      <Fall_ID_KV>
        <Krankenversichertennummer>I123456789</Krankenversichertennummer>
        <Versichertenstatus>50001</Versichertenstatus>
        <Kartengueltigkeit>1712</Kartengueltigkeit>
        <Fallnummer>01800000099988877</Fallnummer>
      </Fall_ID_KV>
    </Kopfdaten>
    <Bewilligung>
      <Admindaten>
        <Verarbeitungskennzeichen>10</Verarbeitungskennzeichen>
        <Version>1.5.0</Version>
        <LfdNr>01</LfdNr>
      </Admindaten>
      <Fachliche_Daten>
        <Rehabilitand>
          <Anrede>1</Anrede>
          <Name>
            <Nachname>Mustermann</Nachname>
            <Vorname>Max</Vorname>
          </Name>
          <Geschlecht>1</Geschlecht>
          <Geburtsdatum>1950-08-21</Geburtsdatum>
          <Adresse>
            <Strasse>Saonestr</Strasse>
            <Hausnummer>3</Hausnummer>
            <Wohnort>Frankfurt</Wohnort>
            <PLZ>60528</PLZ>
            <Laenderkennzeichen>D</Laenderkennzeichen>
          </Adresse>
          <Kommunikation>
            <Telefon>069/12345</Telefon>
          </Kommunikation>
        </Rehabilitand>
      </Fachliche_Daten>
    </Bewilligung>
  </KV>
</Reha>

Delphi-Quellcode:
var
 XML: IXMLReha;
begin
  XML := NewReha;
  XML.OwnerDocument.Options := [doNodeAutoCreate, doNodeAutoIndent];
  XML.Logische_Version := '1.6.0';

  XML.DeclareNamespace('xsi', 'http://www.w3.org/2001/XMLSchema');
  XML.Attributes['xsi:schemaLocation'] := 'http://www.foo.com/Myxsd.xsd';

  {Kopfdaten}
  XML.KV.DeclareNamespace('xsi', 'http://www.w3.org/2001/XMLSchema');
  XML.KV.Attributes['reh:schemaLocation'] := 'http://www.foo.com/Myxsd.xsd';

  XML.KV.Kopfdaten.Erstellungsdatum_Uhrzeit            := '2014-09-23T15:33:23';
  XML.KV.Kopfdaten.Version                             := '1.2.0';
  XML.KV.Kopfdaten.Dateinummer                         := '000010';

  XML.KV.Kopfdaten.Identifikationsdaten.IK_Absender    := '108018007';
  XML.KV.Kopfdaten.Identifikationsdaten.IK_Empfaenger  := '510800000';
  XML.KV.Kopfdaten.Identifikationsdaten.IKKostentraeger := '108018007';
  XML.KV.Kopfdaten.Identifikationsdaten.IK_Einrichtung := '510800000';

  XML.KV.Kopfdaten.Fall_ID_KV.Krankenversichertennummer := 'I123456789';
  XML.KV.Kopfdaten.Fall_ID_KV.Versichertenstatus       := '50001';
  XML.KV.Kopfdaten.Fall_ID_KV.Kartengueltigkeit        := '1712';
  XML.KV.Kopfdaten.Fall_ID_KV.Fallnummer               := '01800000099988877';
  XML.KV.Kopfdaten.Dateinummer                         := '';


  {Bewilligung}
  XML.KV.Bewilligung.Admindaten.Verarbeitungskennzeichen := '10';
  XML.KV.Bewilligung.Admindaten.Version                 := '1.5.0';
  XML.KV.Bewilligung.Admindaten.LfdNr                   := '01';

  XML.KV.Bewilligung.Fachliche_Daten.Rehabilitand.Anrede        := '1';
  XML.KV.Bewilligung.Fachliche_Daten.Rehabilitand.Name.Nachname := 'Mustermann';
  XML.KV.Bewilligung.Fachliche_Daten.Rehabilitand.Name.Vorname  := 'Max';

  XML.KV.Bewilligung.Fachliche_Daten.Rehabilitand.Geschlecht := '1';
  XML.KV.Bewilligung.Fachliche_Daten.Rehabilitand.Geburtsdatum := '1950-08-21';

  XML.KV.Bewilligung.Fachliche_Daten.Rehabilitand.Adresse.Strasse := 'Saonestr';
  XML.KV.Bewilligung.Fachliche_Daten.Rehabilitand.Adresse.Hausnummer := '3';
  XML.KV.Bewilligung.Fachliche_Daten.Rehabilitand.Adresse.Wohnort := 'Frankfurt';
  XML.KV.Bewilligung.Fachliche_Daten.Rehabilitand.Adresse.PLZ := '60528';
  XML.KV.Bewilligung.Fachliche_Daten.Rehabilitand.Adresse.Laenderkennzeichen := 'D';

  XML.KV.Bewilligung.Fachliche_Daten.Rehabilitand.Kommunikation.Telefon := '069/12345';

  { ...}

  //Dokument speichern
  XML.OwnerDocument.SaveToFile('\\Server\Gen.xml');
end;
Mit welchem Befehl kann ich Präfixe setzen? Wie ihr seht sind die Präfixe unterschiedlich das kommt auf die Tiefe der Ebene drauf an. :?::thumb:

himitsu 7. Apr 2015 15:27

AW: IXMLNode - Namespaces setzen
 
Hab die Syntax nicht ganz im Kopf, aber du mußt die "Namespaces" auch bei den Nodes mit angeben, also genauso, wie du es schon bei den Attributen gemacht hast.

Zitat:

Delphi-Quellcode:
XML.KV.Kopfdaten.xxx

Delphi-Quellcode:
XML.reh:KV.reh:Kopfdaten.xxx
geht so natürlich nicht, also via String, so ungefähr
Delphi-Quellcode:
XML.Node('reh:KV').Node('reh:Kopfdaten').xxx
, bzw.
Delphi-Quellcode:
XML.Node('reh:KV\reh:Kopfdaten').xxx
.


Erstellungsdatum_Uhrzeit: Ich würde jetzt auf die DataUtils hinweisen und die darin versteckten Datumsfunktionen für ISO 8601, aber Delphi 5 wird damit wohl Probleme haben.
Schreiben kann man aber notfalls auch mit
Delphi-Quellcode:
FormatDateTime('yyyy-mm-dd"T"hh":"mm":"ss', D)
.

Sir Rufo 8. Apr 2015 08:01

AW: IXMLNode Präfixe setzen
 
Crosspost

himitsu 8. Apr 2015 08:44

AW: IXMLNode Präfixe setzen
 
Zitat:

Its smilar yes, but as you can see i dont work with "AddChild" so the solution makes no sense for me. Thats why i asked
Weil diese Lösung hier nicht gefällt, nix sagen und wo anders "heimlich" nochmal fragen? :thumb:
Wer keine einfaches Standardverhalten haben will, kann auch kein einfaches Standardvorgehen nutzen. Bin mal gespannt, ob es da eine andere Antwort gibt.

Einzige Lösung, die mir noch einfällt: So die XML erstellen und nachträglich z.B. via XLS-Transformation die XML um die Namespaces erweitern.

Back2Code 15. Apr 2015 09:49

AW: IXMLNode Präfixe setzen
 
Zitat:

Zitat von himitsu (Beitrag 1296604)
Zitat:

Its smilar yes, but as you can see i dont work with "AddChild" so the solution makes no sense for me. Thats why i asked
Weil diese Lösung hier nicht gefällt, nix sagen und wo anders "heimlich" nochmal fragen? :thumb:
Wer keine einfaches Standardverhalten haben will, kann auch kein einfaches Standardvorgehen nutzen. Bin mal gespannt, ob es da eine andere Antwort gibt.

Einzige Lösung, die mir noch einfällt: So die XML erstellen und nachträglich z.B. via XLS-Transformation die XML um die Namespaces erweitern.

Es geht hier ja nicht um gefällt oder nicht sondern darum, dass ich auf die Werte so zugreifen möchte wie es doch eigentlich ? gedacht war und nicht über Weg xyz ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:53 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