2
我試圖從SQL Server中的SOAP響應中獲取「響應」文本,但因爲從SQL Server解析錯誤而無法使用soap:Envelope。在SQL Server中解析SOAP XML
XML parsing error: Reference to undeclared namespace prefix: 'soap'.
我的XML迴應如下,並且包含在所謂@xmlOut一個nvarchar:
<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>
我試圖讓Method1Result成一個nvarchar但我真的閱讀本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
這是怎麼了,我通常讀我的XML變量在SQL,但只要我嘗試閱讀肥皂:信封我得到這個錯誤:
XML parsing error: Reference to undeclared namespace prefix: 'soap'.
謝謝。方法1在SQL2008上完美工作。 – Elarys
作爲第二個問題,您如何使用上述示例從soap中獲取faulttring文本:Fault。 我認爲這樣做,但它沒有返回任何值。 ; with xmlnamespaces('http://schemas.xmlsoap.org/soap/envelope/'as [soap], 默認'http://tempuri.org/') select @ xDoc.value('(/ soap:Envelope/soap:Body/soap:Fault/faultstring)[1]','nvarchar(max)') – Elarys
@Elarys - XML區分大小寫。也許它應該是'FaultString'。 –