كيف يمكنني تحديد علامات من استعلام SQL XML؟

StackOverflow https://stackoverflow.com/questions/983135

  •  13-09-2019
  •  | 
  •  

سؤال

كيف يمكنني استرداد الحقول داخل حقل XML في MS SQL؟

كل استفسار أحاول عدم العمل كما هو مخصص عند استخدام رمز XML هذا:

<soap:Envelope xmlns:xsi="[URI]" xmlns:xsd="[URI]" xmlns:soap="[URI]">
  <soap:Body>
    <RunPackage xmlns="[URI]">
      <xmlDoc>
        <Request>
          <SubscriberCode>76547654</SubscriberCode>
          <CompanyCode></CompanyCode>
        </Request>
      </xmlDoc>
    </RunPackage>
  </soap:Body>
</soap:Envelope>

أنا لا أعرف كيفية الرجوع إلى أول علامتين. لقد حاولت

SELECT TransactionID, T2.Loc.query('data(Request/SubscriberCode)') as 'SubscriberCode'
FROM   TempWorksRequest
CROSS APPLY RequestXML.nodes('soap:Envelope/soap:Body/RunPackage/xmlDoc') as T2(Loc) 

مع عدم وجود حظ.

هل كانت مفيدة؟

المحلول

تحتاج إلى إعلان مساحات أسماء XML ("الصابون" في هذه الحالة، بالإضافة إلى واحد آخر للعقدة وأي شيء أدناه) في عمليات XQuery الخاصة بك:

SELECT 
   TransactionID, 
   T2.Loc.query('declare namespace ns="[URI1]";data(ns:Request/ns:SubscriberCode)') 
     as 'SubscriberCode'
FROM   
   TempWorksRequest
CROSS APPLY 
   RequestXML.nodes('declare namespace soap="[URI]";
                     declare namespace ns="[URI1]";
                     soap:Envelope/soap:Body/ns:RunPackage/ns:xmlDoc') as T2(Loc)

[URI1] يحتاج إلى أن يكون URI الذي يعرف على <RunPackage> بطاقة شعار.

مارك

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top