en fait, si tu ne connais rien à SOAP ou XML tu vas nager un peu
dans https://github.com/LandrixSoftware/Z.../master/Schema
tu as les Schema de la norme, c'est un ensemble de fichiers XML qui définissent les règles selon lesquels doit être construit le XML, c'est totalement imbuvable en général (ou très puissant selon qui en parle)
et quand on regarde le XML généré ici on ne peut que conclure que c'est une usine à gaz 
perso, je préfère de loin générer le XML "à la main" car c'est juste un fichier texte qui a une structure bien définie
donc perso j'utilise des fonctions comme celles-ci pour SOAP (qui est du XML)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| const
XML_UTF8 = '<?xml version="1.0" encoding="utf-8"?>';
function xmlTag(const Name, Params, Value: UTF8String): UTF8String;
begin
Result := '<' + Name;
if Params <> '' then
Result := Result + ' ' + Params;
if Value <> '' then
Result := Result + '>' + Value + '</' + Name + '>'
else
Result := Result + '/>';
end;
function soap(const Header, Body: UTF8String; const ExtraHeader: UTF8String = ''): UTF8String;
begin
// SOAP 1.2
Result := XML_UTF8
+ xmlTag('soap:Envelope', 'xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"' + ExtraHeader,
xmlTag('soap:Header', '', Header)
+ xmlTag('soap:Body', '', Body)
);
end; |
le seul truc à bien comprendre c'est l'histoire des XML Namespace
une balise fait parti d'un namespace, par exemple dans SOAP, la base Envelope doit s'écrire
<Envelope xmlns="http://www.w3.org/2003/05/soap-envelope">...</Envelope>
et tous les enfants héritent de ce NS, tu n'as donc pas besoin de le répéter
mais comme souvent tu as plusieurs NS dans un même XML, tu peux passer par des alias que tu mets devant la balise et après xmlns
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">...</Envelope>
et tu peux alors préfixer tes balises avec un des alias présent chez ses parents...comme xsi ou xsd dans ma fonction soap()
tu peux même avoir des balises dans un NS et ses attributs dans un autre
1 2 3 4 5 6 7 8
| <saml:AttributeValue>
<PurposeOfUse code="normal"
codeSystem="1.2.250.1.213.1.1.4.248"
codeSystemName="mode acces VIHF 1.0"
displayName="Accès normal"
xsi:type="CE"
xmlns="urn:hl7-org:v3"/>
</saml:AttributeValue> |
et c'est là que ça devient le bordel 😉
et il n'y a donc pas une seule façon d'écrire un XML, tant que les NS et leurs alias sont définis correctement, c'est valide.
avec ça en tête, le document c'est juste un emboîtement de balises avec les NS bien définis, attention aussi à l'encodage...tout en UTF8 et il faut encoder en HTML les caractères " & < et > (" & < > ) qui sont dans des parties texte.
donc soit tu te casses un peu la tête à comprendre la structure du fichier que tu peux valider avec des outils comme SOAPUI, soit tu pars sur des outils qui sont capables de digérer les schemas et produire des classes objets obscures comme le fait l'exemple sur Git
Partager