使用命名空间解析来自 XML 的数据

Parse data from XML with namespace

我正在尝试解析来自 SQL 服务器的 XML 数据。但是虽然我尝试了很多方法,我都没有成功。

当我运行脚本时它没有给出错误但是returns没有记录

DECLARE @xmlData XML

SET @xmlData = '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
      <faultcode>S:VersionMismatch</faultcode>
      <faultstring>Couldnt create SOAP message. Expecting Envelope in namespace http://schemas.xmlsoap.org/soap/envelope/, but got null </faultstring>
    </S:Fault>
  </S:Body>
</S:Envelope>
'

SET @xmlData = (SELECT @xmlData.query('declare default element namespace "http://schemas.xmlsoap.org/soap/envelope/";
/Envelope/Body'))

SELECT @xmlData

SELECT b.value('(./Fault/faultcode/text())[1]', 'Varchar(50)') AS [Name]
  FROM @xmlData.nodes('/Body') AS a (b)

使用WITH XMLNAMESPACES

;WITH XMLNAMESPACES('http://schemas.xmlsoap.org/soap/envelope/' AS S)
SELECT b.value('(./S:Fault/faultcode/text())[1]', 'Varchar(50)') AS [Name]
  FROM @xmlData.nodes('//S:Body') AS a (b);

db<>fiddle demo