Читать XML в SQL Server - PullRequest
       6

Читать XML в SQL Server

0 голосов
/ 10 июня 2018

Я пытаюсь прочитать ниже XML в SQL.Но я всегда получаю нулевые значения.

Я сохранил свой XML в таблице EMPweb и затем попытался прочитать XML.Мой код SQL, как показано ниже.Пожалуйста, помогите, если можете.

<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>
    <GetEmployeeResponse xmlns="http://tempuri.org/">
      <GetEmployeeResult>
        <xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="Plant">
          <xs:element name="Plant" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
            <xs:complexType>
              <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element name="OrderReleaseAblity">
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element name="BusinessEntityID" type="xs:int" minOccurs="0" />
                      <xs:element name="NationalIDNumber" type="xs:string" minOccurs="0" />
                      <xs:element name="LoginID" type="xs:string" minOccurs="0" />
                      <xs:element name="JobTitle" type="xs:string" minOccurs="0" />
                    </xs:sequence>
                  </xs:complexType>
                </xs:element>
              </xs:choice>
            </xs:complexType>
          </xs:element>
        </xs:schema>
        <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
          <Plant xmlns="">
            <OrderReleaseAblity diffgr:id="OrderReleaseAblity1" msdata:rowOrder="0">
              <BusinessEntityID>275</BusinessEntityID>
              <NationalIDNumber>841560125</NationalIDNumber>
              <LoginID>adventure-works\michael9</LoginID>
              <JobTitle>Sales Representative</JobTitle>
            </OrderReleaseAblity>
          </Plant>
        </diffgr:diffgram>
      </GetEmployeeResult>
    </GetEmployeeResponse>
  </soap:Body>
</soap:Envelope>

SQL-запрос:

DECLARE @xDoc XML ; 
Set @xDoc= (Select Data_xml from EMPWeb);

;WITH  XMLNAMESPACES('urn:schemas-microsoft-com:xml-msdata' as msdata,'urn:schemas-microsoft-com:xml-diffgram-v1' as diffgr,default 'http://www.w3.org/2001/XMLSchema'  )

select T.X.value('JobTitle[1]','varchar(500)') AS JobTitle

from @xDoc.nodes('GetEmployeeResponse/GetEmployeeResult/diffgr:diffgram/Plant/OrderReleaseAblity') as T(X)

1 Ответ

0 голосов
/ 10 июня 2018

Вы неправильно указали свои пространства имен XML и XPath при вызове .nodes() - попробуйте это:

;WITH XMLNAMESPACES('http://schemas.xmlsoap.org/soap/envelope/' AS soap, 
                    'http://tempuri.org/' AS ns, 
                    'urn:schemas-microsoft-com:xml-diffgram-v1' AS dg)
SELECT 
    T.X.value('JobTitle[1]','varchar(500)') AS JobTitle
FROM 
    @xDoc.nodes('/soap:Envelope/soap:Body/ns:GetEmployeeResponse/ns:GetEmployeeResult/dg:diffgram/Plant/OrderReleaseAblity') AS T(X)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...