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 的 ID 属性,然后是 CaseInformation 中的几个字段。我将非常感谢任何帮助。非常感谢!

4

1 回答 1

1

三个问题:

  1. 您的命名空间不正确 - 最后没有右括号;命名空间必须指定为'http://xxx.OrderRequest/2'(not 'http://xxx.OrderRequest/2)')

  2. 您错过了<OrderRequest>and之间<MFRRequest>的一个 XML 元素 - 这<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 回答