1

n00b のような質問で申し訳ありませんが、SQL Server (2005) で XML を扱うのはこれが初めてです。これが私がうまくいくと思ったものです...

DECLARE @doc xml

SET @doc =

'<?xml version="1.0" encoding="UTF-8"?>
<p:OrderRequest xmlns:p="http://xxx.OrderRequest/2" xmlns:xsi="http://xxx.XMLSchema-instance" xsi:schemaLocation="http://xxx.OrderRequestV2.xsd ">
  <p:Header>
    <p:LLLRequestCount>0</p:LLLRequestCount>
    <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>
       <Type>1A</Type>
       <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(DEFAULT 'http://xxx.OrderRequest/2)')


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

...しかし、私は空白に戻ります。私もOPENXMLを使ってみました。私は空白しか得られません。この時点で非常に多くの例を試しましたが、何が欠けているのかわかりません:-/

MFRRequest、AccountNumber、Status、および CaseInformation のいくつかのフィールドの ID プロパティを取得する必要があります。どんな援助にもとても感謝しています。本当にありがとう!

4

1 に答える 1

1

3つの問題:

  1. 名前空間が正しくありません-最後に閉じ括弧がありません。'http://xxx.OrderRequest/2'名前空間は(ではなく'http://xxx.OrderRequest/2)')として指定する必要があります

  2. <OrderRequest>との間の1つのXML要素を見逃しました-これら2つの間に<MFRRequest>aがあります<RequestItems>

  3. 一部の要素は名前空間を使用します(一部(など<Status>)は使用しません)。したがって、名前空間にXML名前空間プレフィックスを使用して、どの要素がそれを使用するか(および使用しないか)を示す必要があります。

したがって、代わりにこのT-SQLコードを使用すると、次のように機能します。

;WITH XMLNAMESPACES('http://xxx.OrderRequest/2' AS p)
SELECT 
    Y.i.value('Status[1]', 'varchar(10)') AS Status
FROM 
    @doc.nodes('/p:OrderRequest/p:RequestItems/p:MFRRequest') AS Y(i)
于 2012-07-26T17:07:48.317 に答える