Я немного новичок в использовании XML на сервере sql, и у меня возникла проблема с правильным синтаксисом - и в этом отношении, возможно, возникла некоторая путаница относительно ссылок на элементы XML.
В любом случае, мне нужно разделить XML, как показано ниже, на столбцы. Кажется простым, но я, кажется, не могу получить правильные узлы - или в этом отношении я не думаю, что я делаю пространства имен xml также правильно. Я еще не нашел много полезного в Интернете. Буду очень признателен за любые советы!
спасибо,
Sylvia
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)
EDIT:
Ладно, разобрался. У меня в основном были пространства и узлы xmlname полностью испорчены. Я думал, что скопировал их (изменив их соответствующим образом) из работающего кода, поэтому, если кто-нибудь захочет указать мне хорошее связное объяснение, я дам им ответ.
Кроме того, у меня не было проблем с получением данных столбца, поэтому я просто поставил 1 для заполнителя - ниже я фактически поставил один из реальных столбцов.
Спасибо за чтение!
Sylvia
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)