2

次のXMLとコードがあり、AccountNumberとStatusをプルバックできます。私も引き戻す必要があります...

  • MFRRequestのIDプロパティ
  • CaseInformationノードのいくつかの要素

IDプロパティを取得する方法がわからないので、疑問に思っています...このすべての情報を(複数のノードから)同じクエリで取得できますか?

ありがとうございました!

DECLARE @doc xml
SET @doc =
'<?xml version="1.0" encoding="UTF-8"?>
<p:OrderRequest xmlns:p="http://XXX.Schemas.OrderRequest/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://XXX.Schemas.OrderRequest/2 OrderRequestV2.xsd ">
  <p:Header>
    <p:SCRARequestCount>0</p:SCRARequestCount>
    <p:MFRRequestCount>1</p:MFRRequestCount>
    <p:FileCreatedAt>2001-12-31T12:00:00</p:FileCreatedAt>
    <p:RequestFileName>p:RequestFileName</p:RequestFileName>
  </p:Header>
  <p:RequestItems>
  <p:MFRRequest id="1" priority="">
      <p:AccountNumber>9999999</p:AccountNumber>
      <Status>Initial</Status>
      <p:CaseInformation>
       <ReferralDate>2011-01-01</ReferralDate>
       <LoanType>1A</LoanType>
       <ARM>Yes</ARM>
        <InvestorNumber>InvestorNumber</InvestorNumber>
        <PropertyAddress>PropertyAddress</PropertyAddress>
        <PrivateLabel>Yes</PrivateLabel>
        <CaseNumber>01-11111/AK/</CaseNumber>
        <SuspenseBalance>9999.00</SuspenseBalance>
        <TitleOrderedDate>2011-09-01</TitleOrderedDate>
        <TotalMonthlyPayment>876.99</TotalMonthlyPayment>
      </p:CaseInformation>
    </p:MFRRequest>
  </p:RequestItems>
</p:OrderRequest>'
;WITH XMLNAMESPACES('http://XXX.Schemas.OrderRequest/2' AS p) 

SELECT     
 Y.i.value('Status[1]', 'varchar(10)') AS Status ,
 Y.i.value('p:AccountNumber[1]', 'varchar(10)') AS AccountNumber
FROM      @doc.nodes('/p:OrderRequest/p:RequestItems/p:MFRRequest') AS Y(i) 
4

1 に答える 1

2

次のようなものを試してください。

;WITH XMLNAMESPACES('http://XXX.Schemas.OrderRequest/2' AS p)
SELECT 
    MFRRequestID = Y.i.value('(@id)[1]', 'int'),
    RequestStatus = Y.i.value('Status[1]', 'varchar(10)') ,
    AccountNumber = Y.i.value('p:AccountNumber[1]', 'varchar(10)'),
    ReferralDate = CIF.value('(ReferralDate)[1]', 'varchar(25)'),
    CaseInfoType = CIF.value('(Type)[1]', 'varchar(25)')
FROM 
    @doc.nodes('/p:OrderRequest/p:RequestItems/p:MFRRequest') AS Y(i)
CROSS APPLY
    i.nodes('p:CaseInformation') AS Tbl(CIF)

基本的に、疑似テーブルに<p:MFRRequest>XML要素が含まれると、2番目の呼び出しを使用して(場合によっては複数の)ノードを取得し、この新しい2番目の疑似テーブルの呼び出しを使用してそこから1ビットの情報を抽出できます。Y(i).nodes()<p:CaseInfomration>.value()

于 2012-07-26T17:57:21.160 に答える