IXMLNode设置前缀和命名空间

Hid*_*den 7 xml delphi xsd xml-parsing

这是我收到的xml文件,我想用delphi生成相同的输出.我使用delphi xml向导通过我的架构生成一个大单元.

所以这是我想要的输出(原始文件)

<?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>
Run Code Online (Sandbox Code Playgroud)

我的delphi代码

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

  //Präfixe wie :bs, :reh fehlen noch

  {Kopfdaten}       //xmlns:kod
  Xml.KV.Kopfdaten.DeclareNamespace('kod', 'http://www.vdek.com/xml-schema/KOD/1.2');
  Xml.KV.Kopfdaten.Attributes['test'] := 'test2';

  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;
Run Code Online (Sandbox Code Playgroud)

用我的delphi代码生成输出

<?xml version="1.0"?>
<Reha xmlns="http://www.vdek.com/xml-schema/REH/1.8" xsi:schemaLocation="http://www.foo.com/Myxsd.xsd">
  <logische_Version>1.6.0</logische_Version>
  <KV>
    <Kopfdaten xmlns:kod="http://www.vdek.com/xml-schema/KOD/1.2" test="test2">
      <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>
Run Code Online (Sandbox Code Playgroud)

那么如何在ym xml文件中设置像reh:,:kod ...这样的前缀/命名空间,就像在原始的xml文件中一样?

如你所见,我不使用".addchild"命令,所以我需要一个不同的答案.

Jon*_*den 2

这是一个古老的 Delphi bug,也是每个想要在现代环境中使用 Delphi 进行高端编程的人都会面临的问题。如果 XML 绑定向导遇到像 @include 这样的东西,它往往会崩溃,所以如果您有嵌套的命名空间(或外部依赖项,就像现在大多数模式一样),那么您就不走运了。但是添加命名空间是不可能的。在正常情况下,不需要它,因为 XML 解析器将解析名称,但如果两个文件使用相同的标识符 - 那么它将发生冲突并使 XML 变得无用。你应该向 EMB 提出要求,让他们解决这个问题,就像我在 2 次所做的那样——也许这次他们会醒悟并做点什么。