J'essaie d'obtenir le texte 'Response' à partir d'une réponse SOAP dans SQL Server mais je ne peux pas utiliser soap: Envelope à cause des erreurs d'analyse de SQL Server.Analyse XML SOAP dans SQL Server
XML parsing error: Reference to undeclared namespace prefix: 'soap'.
Ma réponse XML est la suivante et est contenu dans un nvarchar appelé @xmlOut:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<Method1Response xmlns="http://tempuri.org/">
<Method1Result><Interface><Col1>#result#</Col1><Col2>info</Col2><Col3>Record is invalid.</Col3><Col4></Col4></Interface></Method1Result>
</Method1Response>
</soap:Body>
</soap:Envelope>
Je suis en train de se Method1Result dans un nvarchar mais je suis vraiment du mal à lire ce code XML.
declare @xDoc as xml
set @xDoc = cast(@xmlOut as xml)
declare @hdoc int
exec sp_xml_preparedocument @hdoc OUTPUT, @xDoc
select *
from
( select *
from openxml(@hdoc, '/soap:Envelope/soap:Body/MethodResponse', 1)
with (MethodResult nvarchar(max))
) as x
exec sp_xml_removedocument @hdoc
Voici comment je l'ai lu normalement mes variables XML dans SQL, mais dès que j'essaie de lire soap: Envelope je reçois cette erreur:
XML parsing error: Reference to undeclared namespace prefix: 'soap'.
Merci pour cela. La méthode 1 fonctionne parfaitement sur SQL2008. – Elarys
Comme question secondaire, comment utilisez-vous l'exemple ci-dessus pour obtenir le texte faultstring à partir de soap: Fault. Je pensais que cela le ferait, mais il ne retourne aucune valeur du tout. ; avec xmlnamespaces ('http://schemas.xmlsoap.org/soap/envelope/' as [soap], par défaut 'http://tempuri.org/') select @ xDoc.value ('(/ soap: Enveloppe/soap: Corps/soap: Fault/faultstring) [1] ',' nvarchar (max) ') – Elarys
@Elarys - XML est sensible à la casse. Peut-être devrait-il être 'FaultString'. –