在以下链接中 https://msdn.microsoft.com/en-us/library/ms175178.aspx 我发现这个科特迪瓦“然后在查询正文中使用此前缀而不是命名空间 URI”
这让我觉得如果我不指定前缀那么我必须使用 uri 代替前缀。所以请给我一个使用 uri 代替前缀的例子, 因为在上面的链接中没有给出。只有他们给出了带有前缀的示例。
您真诚的
命名空间旨在分隔具有相同名称的元素。很多时候,XML 片段只是“粘合”在一起。 同名的不同元素很可能聚集在一起。通过使用命名空间,命名空间和元素名称的组合用于标识元素。不过不重要,哪个alias是用来指向命名空间的! 您必须区分“命名空间”和给定的“别名”。
以下示例具有两种风格的元素
<a>
。看看这个:
DECLARE @xml XML=
N'<root xmlns="DefaultNS" xmlns:dns="DerivedNS">
<a>This is default</a>
<dns:a>This is derived</dns:a>
</root>';
--没有结果
SELECT a.value(N'(text())[1]',N'nvarchar(max)')
FROM @xml.nodes(N'/root/a') AS A(a);
--通配符命名空间:一切
SELECT a.value(N'(text())[1]',N'nvarchar(max)')
FROM @xml.nodes(N'/*:root/*:a') AS A(a);
--仅声明默认命名空间:仅返回默认元素
WITH XMLNAMESPACES(DEFAULT 'DefaultNS')
SELECT a.value(N'(text())[1]',N'nvarchar(max)')
FROM @xml.nodes(N'/root/a') AS A(a);
--.nodes() 调用派生命名空间:仅返回派生元素
WITH XMLNAMESPACES(DEFAULT 'DefaultNS'
,'DerivedNS' AS xyz) --Other prefix, doesn't matter
SELECT a.value(N'(text())[1]',N'nvarchar(max)')
FROM @xml.nodes(N'/root/xyz:a') AS A(a); --prefix "dns" would not work, the alias is now "xyz"
--这里我使用随机前缀。我将“dns”作为默认别名!
WITH XMLNAMESPACES('DefaultNS' AS dns
,'DerivedNS' AS dns2) --random prefixes for the namespaces, took even dns for the wrong one!
SELECT a.value(N'(text())[1]',N'nvarchar(max)')
FROM @xml.nodes(N'/dns:root/dns:a') AS A(a); --prefix "dns" returns the default ns now! And you need the prefix at `root` too!
--带有内联声明
SELECT a.value(N'(text())[1]',N'nvarchar(max)')
FROM @xml.nodes(N'declare namespace x="DefaultNS"; /x:root/x:a') AS A(a); --The alias "x" is now bound to the default namespace!