2015-05-12 6 views
1

Я уже делал базовую работу xml в T-SQL, но буквально «базовый».T-SQL: запрос xml с пространством имен

Теперь перейдем к более сложному xml, и я полностью смущен тем, с чего начать.

<?xml version="1.0" encoding="UTF-8"?> 
<Calculation:scenario xmlns:Calculation="http://www.sap.com/ndb/BiModelCalculation.ecore" schemaVersion="2.3" id="ADR2" applyPrivilegeType="ANALYTIC_PRIVILEGE" checkAnalyticPrivileges="true" defaultClient="$$client$$" defaultLanguage="$$language$$" visibility="internal" calculationScenarioType="TREE_BASED" dataCategory="DIMENSION" enforceSqlExecution="false" executionSemantic="UNDEFINED" outputViewType="Projection"> 
<origin/> 
<descriptions defaultDescription="ADR2"/> 
<metadata activatedAt="2015-04-22 16:13:29.0" changedAt="2015-04-22 21:12:59.193"/> 
<localVariables/> 
<variableMappings/> 
<dataSources> 
    <DataSource id="ADR2" .... 

Все мои попытки просто вернуть <blank> Я предполагаю, что этот вопрос является точка с запятой «Расчет: сценарий» и «XMLNS: Расчет» От прибегая к помощи до сих пор, это «пространство имен».

Однако во всех примерах, которые я нашел из запроса XML с пространствами имен, источник XML имеет такое свойство, как: Xmlns: нс = «Uri»

Затем они используют это в запросе: «; С XMLNAMESPACES ('uri' as ns) "

У моего xml нет этого атрибута ns.

Может ли кто-нибудь дать мне какие-либо указания относительно того, с чего начать, или какого-нибудь базового учебника, который включает мой сценарий?

Большое спасибо

ответ

2

Одним из примеров, чтобы выбрать элемент или атрибут в пространстве имен:

declare @xml XML = '<?xml version="1.0" encoding="UTF-8"?> 
<Calculation:scenario xmlns:Calculation="http://www.sap.com/ndb/BiModelCalculation.ecore" schemaVersion="2.3" id="ADR2" applyPrivilegeType="ANALYTIC_PRIVILEGE" checkAnalyticPrivileges="true" defaultClient="$$client$$" defaultLanguage="$$language$$" visibility="internal" calculationScenarioType="TREE_BASED" dataCategory="DIMENSION" enforceSqlExecution="false" executionSemantic="UNDEFINED" outputViewType="Projection"> 
<origin/> 
<descriptions defaultDescription="ADR2"/> 
<metadata activatedAt="2015-04-22 16:13:29.0" changedAt="2015-04-22 21:12:59.193"/> 
<localVariables/> 
<variableMappings/> 
</Calculation:scenario>' 

select @xml.value('declare namespace calc="http://www.sap.com/ndb/BiModelCalculation.ecore"; 
(calc:scenario/@id)[1]', 'varchar(max)') as 'scenario_id' 

Выход:

enter image description here

В основном вам нужно объявить отображение префикса пространства имен (calc) в URI пространства имен (http://www.sap.com/ndb/BiModelCalculation.ecore), затем правильно использовать объявленный префикс в XQuery заявление ((calc:scenario/@id)[1]). Все вышеупомянутые шаги демонстрируются в приведенном выше примере.

Для справки:

+1

har07, что гениально, я не могу тебя отблагодарить! – SimonB

+0

@SimonB Не забудьте [принять] (http://stackoverflow.com/help/someone-answers) ответ. Или, может быть, у вас есть определенная причина оставить вопрос открытым? – har07