2015-11-06 65 views
0

這可能是一個簡單的問題,很抱歉。爲openxml設置默認的xml命名空間

我有一個與這些線開出的XML文件:

<?xml version="1.0" encoding="windows-1252"?> 
<MyData xmlns="http://xyz.com.au/schema/v1_10/MyData"> 
    <data> 
    <patient> 
     <link_id>{764C733A-64DE-4663-82B1-1A23B95FDFE2}</link_id> 

我把它加載到一個XML數據類型的表是這樣的:

CREATE TABLE MMD (
Id INT IDENTITY PRIMARY KEY, 
XMLData XML, 
LoadedDateTime DATETIME) 

INSERT INTO MMD (XMLData, LoadedDateTime) 
SELECT CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE() 
FROM OPENROWSET(BULK 'C:\Test.xml', SINGLE_BLOB) AS x; 

我再查詢它像這樣:

DECLARE @XML AS XML, @hDoc AS INT, @SQL NVARCHAR (MAX) 

SELECT @XML = XMLData FROM MMD 

EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML 

;with xmlnamespaces (default 'http://xyz.com.au/schema/v1_10/MyData/') 
SELECT distinct(link_id) 
FROM OPENXML(@hDoc, 'MyData/data/patient') 
WITH 
(link_id [varchar](50) 'link_id') t 

EXEC sp_xml_removedocument @hDoc 
GO 

該查詢返回0行。但是,如果我這樣從文件的第二行中刪除命名空間:從:

<MyData xmlns="http://xyz.com.au/schema/v1_10/MyData"> 

到:

<MyData> 

然後我得到我所期望的結果!

我讀過所有的職位,並嘗試了各種語法的變化沒有成功。

在此先感謝您的幫助。

布賴恩

回答

0

我不知道,如果OPENXMLwith xmlnamespaces是爲了一起工作。這一切工作正常,如果我完全切換到使用xml data type methods(和擴大樣本是有效的XML):

declare @t table (XMLData xml) 
insert into @t(XmlData) values ('<?xml version="1.0" encoding="windows-1252"?> 
<MyData xmlns="http://xyz.com.au/schema/v1_10/MyData"> 
    <data> 
    <patient> 
     <link_id>{764C733A-64DE-4663-82B1-1A23B95FDFE2}</link_id> 
    </patient> 
    </data> 
</MyData>') 

;with xmlnamespaces (default 'http://xyz.com.au/schema/v1_10/MyData') 
select distinct XmlData.value('(MyData/data/patient/link_id)[1]','varchar(50)') 
from @t 

結果:

-------------------------------------------------- 
{764C733A-64DE-4663-82B1-1A23B95FDFE2} 
+0

感謝試圖幫助,但我與語法掙扎。我的背景不是MS T-SQL。我可能需要去看書。 –