我在使用XML在sql server中有些新意,並且在獲取語法的時候遇到了問題 - 對於這個問題,可能對引用XML元素有一些基本的困惑。SQL Server 2008 - 關於粉碎的基本問題XML
無論如何,我需要將XML像下面那樣分解成列。看起來很簡單,但我似乎無法得到正確的節點 - 或者說,我不認爲我正確地做xmlnamespaces。我還沒有發現太多有用的東西。將不勝感激任何提示!
感謝, 西爾維亞
DECLARE @pStepLogXML xml;
select @pStepLogXML = '<?xml version="1.0" encoding="UTF-8"?>
<!--Sample XML file generated by XMLSpy v2010 (http://www.altova.com)-->
<Applescommon:ActivityStepLogList xsi:schemaLocation="urn:SampleCompany:Apples:common:v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:Applescommon="urn:SampleCompany:Apples:common:v1">
<Applescommon:ActivityStepLog>
<Applescommon:GUID>3F2504E0-4F89-11D3-9A0C-0305E82C3301</Applescommon:GUID>
<Applescommon:ContextID>3F2504E0-4F89-11D3-9A0C-0305E82C3302</Applescommon:ContextID>
<Applescommon:LogType>PreStep</Applescommon:LogType>
<Applescommon:SourceID>com.SampleCompany.e3.es.Apples.common.ApplesCommonMessageHandler.processMessage</Applescommon:SourceID>
<Applescommon:LogContent><![CDATA[
<TestXML><XXXXXX></TestXML>
]]></Applescommon:LogContent>
<Applescommon:LogTime>2001-12-17T09:30:47Z</Applescommon:LogTime>
</Applescommon:ActivityStepLog>
<Applescommon:ActivityStepLog>
<Applescommon:GUID>3F2504E0-4F89-11D3-9A0C-0305E82C3303</Applescommon:GUID>
<Applescommon:ContextID>3F2504E0-4F89-11D3-9A0C-0305E82C3302</Applescommon:ContextID>
<Applescommon:LogType>PostStep</Applescommon:LogType>
<Applescommon:SourceID>com.SampleCompany.e3.es.Apples.common.ApplesCommonMessageHandler.processMessage</Applescommon:SourceID>
<Applescommon:LogContent><![CDATA[
<TestXML><XXXXXX></TestXML>
]]></Applescommon:LogContent>
<Applescommon:LogTime>2001-12-17T09:30:47Z</Applescommon:LogTime>
</Applescommon:ActivityStepLog>
</Applescommon:ActivityStepLogList>';
with xmlnamespaces (default 'urn:Applescommon:ActivityStepLogList:v1')
select
--convert(varchar(64), MyTables.MyColumns.value('Applescommon:GUID/text()', n'nvarchar(100)')
-- MyTable.MyColumns.value('Applescommon:GUID/text()', N'nvarchar(50)') AS Test,
--,
1
from @pStepLogXML.nodes('/Applescommon:ActivityStepLog')
as T(c)
編輯:
好了,想通了。我基本上有xmlnamespaces和節點完全搞砸了。我認爲我從代碼中複製了它們(適當地改變它們),所以如果有人願意指向我對這些的一個很好的連貫的解釋,我會給他們答案。
此外,我沒有獲取列數據的問題,所以我只是把1放在一個佔位符 - 下面我實際上放了一個真正的列。
感謝您的閱讀!
西爾維亞
with xmlnamespaces (default 'urn:SampleCompany:Apples:common:v1')
select
--convert(varchar(64), MyTables.MyColumns.value('Applescommon:GUID/text()', n'nvarchar(100)')
-- MyTable.MyColumns.value('Applescommon:GUID/text()', N'nvarchar(50)') AS Test,
--,
T.c.query('SourceID/text()')
,1
from @pStepLogXML.nodes('/ActivityStepLogList/ActivityStepLog')
as T(c)
預期輸出示例? – 2010-10-27 21:32:07