这是我收到的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>
我的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;
我的输出是用我的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>
那么如何在ym xml文件中设置像reh:,:kod ...这样的前缀/命名空间,就像在原始的xml文件中一样?
如你所见,我不使用“.addchild”命令,所以我需要一个不同的答案。
答案 0 :(得分:3)
如果您有一个复杂的XSD架构,由多个文件组成,XML数据绑定向导无法创建正确的代码(就像您已经注意到的那样)。在这种情况下,更容易将所需输出提供给在线XML到XSD转换器,并将其用作数据绑定向导的输入。 我使用优秀的XMLgrid converter
制作了一个新的XSD文件(根据您在此处发布的XML文件生成)<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<!-- XML Schema Generated from XML Document on Thu Apr 09 2015 14:31:00 GMT+0200 (Romance Daylight Time) -->
<!-- with XmlGrid.net Free Online Service http://xmlgrid.net -->
<xs:element name="reh:Reha">
<xs:complexType>
<xs:sequence>
<xs:element name="reh:logische_Version" type="xs:string"></xs:element>
<xs:element name="reh:KV">
<xs:complexType>
<xs:sequence>
<xs:element name="reh:Kopfdaten">
<xs:complexType>
<xs:sequence>
<xs:element name="kod:Erstellungsdatum_Uhrzeit" type="xs:dateTime">
<xs:complexType>
<xs:attribute name="xmlns:kod" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="kod:Version" type="xs:string">
<xs:complexType>
<xs:attribute name="xmlns:kod" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="kod:Dateinummer" type="xs:string">
<xs:complexType>
<xs:attribute name="xmlns:kod" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="kod:Identifikationsdaten">
<xs:complexType>
<xs:sequence>
<xs:element name="kod:IK_Absender" type="xs:string"></xs:element>
<xs:element name="kod:IK_Empfaenger" type="xs:string"></xs:element>
<xs:element name="kod:IK-Kostentraeger" type="xs:string"></xs:element>
<xs:element name="kod:IK_Einrichtung" type="xs:string"></xs:element>
</xs:sequence>
<xs:attribute name="xmlns:kod" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="kod:Fall_ID_KV">
<xs:complexType>
<xs:sequence>
<xs:element name="kod:Krankenversichertennummer" type="xs:string"></xs:element>
<xs:element name="kod:Versichertenstatus" type="xs:string"></xs:element>
<xs:element name="kod:Kartengueltigkeit" type="xs:string"></xs:element>
<xs:element name="kod:Fallnummer" type="xs:string"></xs:element>
</xs:sequence>
<xs:attribute name="xmlns:kod" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="reh:Bewilligung">
<xs:complexType>
<xs:sequence>
<xs:element name="bew:Admindaten">
<xs:complexType>
<xs:sequence>
<xs:element name="bew:Verarbeitungskennzeichen" type="xs:string"></xs:element>
<xs:element name="bew:Version" type="xs:string"></xs:element>
<xs:element name="bew:LfdNr" type="xs:string"></xs:element>
</xs:sequence>
<xs:attribute name="xmlns:bew" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="bew:Fachliche_Daten">
<xs:complexType>
<xs:sequence>
<xs:element name="bew:Rehabilitand">
<xs:complexType>
<xs:sequence>
<xs:element name="bew:Anrede" type="xs:string"></xs:element>
<xs:element name="bew:Name">
<xs:complexType>
<xs:sequence>
<xs:element name="bty:Nachname" type="xs:string">
<xs:complexType>
<xs:attribute name="xmlns:bty" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="bty:Vorname" type="xs:string">
<xs:complexType>
<xs:attribute name="xmlns:bty" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="bew:Geschlecht" type="xs:string"></xs:element>
<xs:element name="bew:Geburtsdatum" type="xs:date"></xs:element>
<xs:element name="bew:Adresse">
<xs:complexType>
<xs:sequence>
<xs:element name="bty:Strasse" type="xs:string">
<xs:complexType>
<xs:attribute name="xmlns:bty" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="bty:Hausnummer" type="xs:string">
<xs:complexType>
<xs:attribute name="xmlns:bty" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="bty:Wohnort" type="xs:string">
<xs:complexType>
<xs:attribute name="xmlns:bty" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="bty:PLZ" type="xs:string">
<xs:complexType>
<xs:attribute name="xmlns:bty" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="bty:Laenderkennzeichen" type="xs:string">
<xs:complexType>
<xs:attribute name="xmlns:bty" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="bew:Kommunikation">
<xs:complexType>
<xs:sequence>
<xs:element name="bty:Telefon" type="xs:string">
<xs:complexType>
<xs:attribute name="xmlns:bty" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="bew:Kosteninformationen">
<xs:complexType>
<xs:sequence>
<xs:element name="bew:Zuzahlung">
<xs:complexType>
<xs:sequence>
<xs:element name="bew:Zuzahlungseinzug" type="xs:string"></xs:element>
<xs:element name="bew:AnzahlTage" type="xs:string"></xs:element>
<xs:element name="bew:Zuzahlungsbetrag" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="bew:Rehainformationen">
<xs:complexType>
<xs:sequence>
<xs:element name="bew:Rehaart" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="bew:Aufnahmedaten">
<xs:complexType>
<xs:sequence>
<xs:element name="bew:IK_Krankenhaus" type="xs:string"></xs:element>
<xs:element name="bew:Behandlungsart" type="xs:string"></xs:element>
<xs:element name="bew:Bewilligungsdiagnosen">
<xs:complexType>
<xs:sequence>
<xs:element name="bew:Version_ICD" type="xs:string"></xs:element>
<xs:element name="bew:Diagnose">
<xs:complexType>
<xs:sequence>
<xs:element name="bty:Diagnosenschluessel" type="xs:string">
<xs:complexType>
<xs:attribute name="xmlns:bty" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="bew:Aufnahmedaten">
<xs:complexType>
<xs:sequence>
<xs:element name="bew:Erfolgt" type="xs:string"></xs:element>
<xs:element name="bew:Geplant" type="xs:date"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="bew:Indikationsgruppe" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="bew:Bewilligungsinformationen">
<xs:complexType>
<xs:sequence>
<xs:element name="bew:Bewilligungsdatum" type="xs:date"></xs:element>
<xs:element name="bew:Kostenzusage_gueltig_bis" type="xs:date"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="bew:Stationaerdaten">
<xs:complexType>
<xs:sequence>
<xs:element name="bew:Behandlungsabschnitte" type="xs:string"></xs:element>
<xs:element name="bew:bewilligte_Tage" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="xmlns:bew" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="reh:Papieranlage" type="xs:string"></xs:element>
</xs:sequence>
<xs:attribute name="xmlns:reh" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>
如果将此XSD文件导入XML绑定向导,它将生成一个可以为您生成正确XML的单元。
答案 1 :(得分:2)
只是一个快速的解决方案,你可以让它变得更漂亮
using msxml;
procedure TForm1.bt1Click(Sender: TObject);
var
Document: DOMDocument;
RootNode, Node: IXMLDOMNode;
const
rehNameSpace: WideString = 'reh';
rehNameSpaceURI: WideString = 'http://www.vdek.com/xml-schema/REH/1.8';
kodNameSpace: WideString = 'kod';
kodNameSpaceURI: WideString = 'http://www.vdek.com/xml-schema/KOD/1.2';
begin
Document := CoDOMDocument60.Create;
RootNode := Document.createNode(NODE_ELEMENT, rehNameSpace + ':Reha', rehNameSpaceURI);
Document.appendChild(RootNode);
Node := Document.createNode(NODE_ELEMENT, rehNameSpace + ':logische_Version', rehNameSpaceURI);
Node.text := '1.6.0';
RootNode.appendChild(Node);
Node := Document.createNode(NODE_ELEMENT, rehNameSpace + ':KV', rehNameSpaceURI);
RootNode.appendChild(Node);
RootNode := Node;
Node := Document.createNode(NODE_ELEMENT, rehNameSpace + ':Kopfdaten', rehNameSpaceURI);
RootNode.appendChild(Node);
RootNode := Node;
Node := Document.createNode(NODE_ELEMENT, kodNameSpace + ':Erstellungsdatum_Uhrzeit', kodNameSpaceURI);
Node.text := '2014-09-23T15:33:23';
RootNode.appendChild(Node);
Node := Document.createNode(NODE_ELEMENT, kodNameSpace + ':Version', kodNameSpaceURI);
Node.text := '1.2.0';
RootNode.appendChild(Node);
Node := Document.createNode(NODE_ELEMENT, kodNameSpace + ':Dateinummer', kodNameSpaceURI);
Node.text := '000010';
RootNode.appendChild(Node);
Node := Document.createNode(NODE_ELEMENT, kodNameSpace + ':Identifikationsdaten', kodNameSpaceURI);
RootNode.appendChild(Node);
RootNode := Node;
mmo1.Text := Document.xml; // TMemo
end;
答案 2 :(得分:1)
这是一个古老的Delphi错误,也是每个想要在现代环境中使用Delphi进行高端编程的问题。 如果遇到像@include这样的事情,XML绑定向导往往会崩溃,所以如果你有嵌套的命名空间(或外部依赖关系,就像现在的大多数模式一样),那你就不走运了。 但是,添加命名空间是不可能的。在正常情况下,它不需要,因为XML解析器将解析名称,但如果您具有两个文件使用的相同标识符 - 那么它将发生冲突并使XML无用。 你应该向EMB提出要求并让他们解决这个问题,就像我在2次出现时做的那样 - 也许这次他们会醒来并做点什么。
答案 3 :(得分:0)
通过数据绑定向导进行导入后,您可以对生成的文件进行后处理。您必须将第三个参数添加到 RegisterChildNode
方法并将第四个参数添加到 RegisterChildNodes
以添加完整的命名空间。之后,您必须更改 Getter
-methods:
例如,您可以更改 TXMLKopfdatenType_reh.AfterConstruction
from
RegisterChildNode('Erstellungsdatum_Uhrzeit', TErstellungsdatum_UhrzeitTyp_kod)
到
RegisterChildNode('Erstellungsdatum_Uhrzeit', TErstellungsdatum_UhrzeitTyp_kod, 'http://www.vdek.com/xml-schema/KOD/1.2');
以及来自
的 Getter-MethodTXMLKopfdatenType_reh.Get_Erstellungsdatum_Uhrzeit
Result := ChildNodes['Erstellungsdatum_Uhrzeit'] as IErstellungsdatum_UhrzeitTyp_kod;
到
Result := ChildNodes['kod:Erstellungsdatum_Uhrzeit'] as IErstellungsdatum_UhrzeitTyp_kod;
通过这种方法,您可以利用 XML 向导的优点并纠正其错误