之前我在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>
我猜这个问题是分号&#34;计算:场景&#34;和&#34; xmlns:计算&#34;
到目前为止,通过Google搜索,这是一个名称空间&#39;。
但是,在我发现使用命名空间查询xml的所有示例中,源xml具有如下属性:xmlns:ns =&#34; uri&#34;
然后他们在查询中使用它:&#34 ;; WITH XMLNAMESPACES(&#39; uri&#39; as ns)&#34;
我的xml没有此ns属性。
有人可以给我任何关于从哪里开始的指示,或者包含我的场景的一些基本教程吗?
非常感谢
答案 0 :(得分: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'
输出:
基本上,您需要声明名称空间前缀(calc
)到名称空间URI(http://www.sap.com/ndb/BiModelCalculation.ecore
)的映射,然后在XQuery语句((calc:scenario/@id)[1]
)中正确使用声明的前缀。所有提到的步骤都在上面的例子中进行了演示。
供参考: