2016-07-26 126 views
1
到ReadXML的
Declare @XML XML 
SET @XML = 
'<?xml version="1.0" encoding="UTF-8"?> 
<Dealer schemaID="DL" xmlns="http://www.abc.zy/kudos/kentucy" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.abc.zy/kudos/kentucy/ik schema13_dealer(dl).xsd"> 
    <Head> 
     <ImporterNr>ZZ840</ImporterNr> 
     <ForwarderNr>XYZA</ForwarderNr> 
     <RecordType>MR</RecordType> 
     <Filename>FZ12325</Filename> 
     <Items> 
     <Item> 
      <AddressType>L</AddressType> 
      <DealerNr>KZ DEALER LLC</DealerNr> 
      <ShortName>KZ D </ShortName> 
      <DealerName>DEALER T </DealerName> 
      <Street>Riverpol Romerro Calle 31D No. 12-25</Street> 
      <Country>SG </Country> 
      <ZIP>1234</ZIP> 
      <Town>MCGY</Town> 
     </Item> 
     </Items> 
    </Head> 
    </Dealer>' 

我的查詢是這樣的無法與SchemaId

SELECT 
    Cust.value('(ImporterNr)[1]', 'nvarchar(50)') AS 'ImporterNr', 
    Cust.value('(ForwarderNr)[1]', 'nVarchar(50)') AS 'ForwarderNr', 
    Cust.value('(Items/Item/AddressType)[1]', 'nVarchar(50)') AS 'AddressType' 
FROM 
    @XML.nodes('/Dealer/Head') AS AOC(Cust) 

的3列ImporterNr,ForwarderNr,地址類型返回NULL值難道我做錯什麼你的建議吧。

申報@XML XML SET @XML =

'<?xml version="1.0" encoding="UTF-8"?> 
<Dealer schemaID="DL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.abc.zy/kudos/kentucy/ik schema13_dealer(dl).xsd"> 
    <Head> 
     <ImporterNr>ZZ840</ImporterNr> 
     <ForwarderNr>XYZA</ForwarderNr> 
     <RecordType>MR</RecordType> 
     <Filename>FZ12325</Filename> 
     <Items> 
     <Item> 
      <AddressType>L</AddressType> 
      <DealerNr>KZ DEALER LLC</DealerNr> 
      <ShortName>KZ D </ShortName> 
      <DealerName>DEALER T </DealerName> 
      <Street>Riverpol Romerro Calle 31D No. 12-25</Street> 
      <Country>SG </Country> 
      <ZIP>1234</ZIP> 
      <Town>MCGY</Town> 
     </Item> 
     <Item> 
      <AddressType>L</AddressType> 
      <DealerNr>ALIAV</DealerNr> 
      <ShortName>K V </ShortName> 
      <DealerName>K T VALLEDUPAR        </DealerName> 
      <Street>CARRERA 19 KM 0-700 CLUB DEPORTIVO RUDATO   </Street> 
      <Country>ZO </Country> 
      <ZIP>123  </ZIP> 
      <Town>VALLEDUPAR          </Town> 
     </Item> 
     </Items> 
    </Head> 
    </Dealer>' 

如果多個節點出現在查詢不工作。

回答

1

添加命名空間查詢:

Declare @XML XML 
SET @XML = 
'<?xml version="1.0" encoding="UTF-8"?> 
<Dealer schemaID="DL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.abc.zy/kudos/kentucy/ik schema13_dealer(dl).xsd"> 
    <Head> 
     <ImporterNr>ZZ840</ImporterNr> 
     <ForwarderNr>XYZA</ForwarderNr> 
     <RecordType>MR</RecordType> 
     <Filename>FZ12325</Filename> 
     <Items> 
     <Item> 
      <AddressType>L</AddressType> 
      <DealerNr>KZ DEALER LLC</DealerNr> 
      <ShortName>KZ D </ShortName> 
      <DealerName>DEALER T </DealerName> 
      <Street>Riverpol Romerro Calle 31D No. 12-25</Street> 
      <Country>SG </Country> 
      <ZIP>1234</ZIP> 
      <Town>MCGY</Town> 
     </Item> 
     </Items> 
    </Head> 
    </Dealer>' 

;WITH XMLNAMESPACES ('http://www.abc.zy/kudos/kentucy' as ns1) 
SELECT 
    Cust.value('(ns1:ImporterNr)[1]', 'nvarchar(50)') AS 'ImporterNr', 
    Cust.value('(ns1:ForwarderNr)[1]', 'nVarchar(50)') AS 'ForwarderNr', 
    Cust.value('(ns1:Items/ns1:Item/ns1:AddressType)[1]', 'nVarchar(50)') AS 'AddressType' 
FROM 
    @XML.nodes('/ns1:Dealer/ns1:Head') AS AOC(Cust) 

或者從XML中刪除。

+0

它工作非常感謝。 – explore365

+0

我只想知道如果有多個節點存在。即 explore365

+0

@ explore365請更新您的問題,或創建一個新的 – Backs