在xml列中获取节点值

时间:2017-01-13 17:32:39

标签: sql xml sql-server-2008 tsql

请让我知道为什么以下XML查询没有获取任何结果。 我正在尝试获取值EffectiveUserName标记。

DECLARE @MyXML XML
        SET @MyXML = '<PropertyList xmlns="urn:schemas-microsoft-com:xml-analysis" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <Catalog>name</Catalog>
      <Timeout>600</Timeout>
      <Format>Native</Format>
      <DbpropMsmdFlattened2>false</DbpropMsmdFlattened2>
      <Cube>Model</Cube>
      <DbpropMsmdOptimizeResponse>1</DbpropMsmdOptimizeResponse>
      <DbpropMsmdActivityID>68A6900B-20F8-4A02-AEC3-7C56B2D3C5D5</DbpropMsmdActivityID>
      <DbpropMsmdRequestID>A0D1E07F-AE29-4CCA-AEE4-3B79D97CA426</DbpropMsmdRequestID>
      <DbpropMsmdCurrentActivityID>68A6900B-20F8-4A02-AEC3-7C56B2D3C5D5</DbpropMsmdCurrentActivityID>
      <LocaleIdentifier>1033</LocaleIdentifier>
      <EffectiveUserName>userid@domainname.com</EffectiveUserName>
      <sspropinitappname>PowerBI</sspropinitappname>
    </PropertyList>'


    select  @MyXML.value('(/PropertyList/EffectiveUserName)[1]','varchar(max)')

2 个答案:

答案 0 :(得分:2)

您的XML有一个默认命名空间,您必须尊重并包含​​在您的查询中!

<PropertyList xmlns="urn:schemas-microsoft-com:xml-analysis"  
              ***********************************************
              xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

使用此代码通过为查询定义默认 XML命名空间来获取您正在寻找的值:

;WITH XMLNAMESPACES(DEFAULT 'urn:schemas-microsoft-com:xml-analysis')
SELECT
    @MyXML.value('(/PropertyList/EffectiveUserName)[1]', 'varchar(50)')

答案 1 :(得分:2)

您可以在标记名称之前使用*:来忽略命名空间:

select  @MyXML.value('(/*:PropertyList/*:EffectiveUserName)[1]','varchar(max)')