【问题标题】:T-SQL: query xml with namespaceT-SQL:使用命名空间查询 xml
【发布时间】:2015-05-12 11:26:16
【问题描述】:

我之前在 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" ....

我所有的尝试都只是带回&lt;blank&gt; 我猜问题是分号“Calculation:scenario”和“xmlns:Calculation” 从到目前为止的谷歌搜索来看,这是一个“命名空间”。

但是,在我发现的所有使用命名空间查询 xml 的示例中,源 xml 都有一个属性,例如:xmlns:ns="uri"

然后他们在查询中使用它:“;WITH XMLNAMESPACES ('uri' as ns)”

我的 xml 没有这个 ns 属性。

谁能给我任何关于从哪里开始的指示,或者一些包含我的场景的基本教程?

非常感谢

【问题讨论】:

    标签: xml tsql


    【解决方案1】:

    在命名空间中选择元素或属性的一个示例:

    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]) 中正确使用声明的前缀。所有提到的步骤都在上面的示例中进行了演示。

    供参考:

    【讨论】:

    • @SimonB 不要忘记accept 答案。或者,也许您有特定的理由让问题像这样悬而未决?
    猜你喜欢
    • 2012-02-13
    • 2013-12-25
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多