请让我知道为什么以下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)')
答案 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)')