Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用以下带out前缀的xml查询_Sql_Sql Server_Xml_Tsql_Namespaces - Fatal编程技术网

Sql 如何使用以下带out前缀的xml查询

Sql 如何使用以下带out前缀的xml查询,sql,sql-server,xml,tsql,namespaces,Sql,Sql Server,Xml,Tsql,Namespaces,在下面的链接中 我发现这个cote“然后在查询体中使用这个前缀,而不是名称空间URI” 这让我觉得,如果我不指定前缀,那么我必须使用uri来代替前缀。请给我一个用uri代替前缀的例子, 因为在上面的链接中没有给出。只有他们给出了带有前缀的示例 你的sincerley这个问题不是一个好问题:请阅读并回答 但我会尽力回答 名称空间用于分隔同名元素。通常XML片段只是粘在一起。很有可能,同名的不同元素聚集在一起。通过使用名称空间,名称空间和元素名称的组合被用来标识元素。但是,不重要,使用哪个别名来指向

在下面的链接中 我发现这个cote“然后在查询体中使用这个前缀,而不是名称空间URI”

这让我觉得,如果我不指定前缀,那么我必须使用uri来代替前缀。请给我一个用uri代替前缀的例子, 因为在上面的链接中没有给出。只有他们给出了带有前缀的示例


你的sincerley

这个问题不是一个好问题:请阅读并回答

但我会尽力回答

名称空间用于分隔同名元素。通常XML片段只是粘在一起。很有可能,同名的不同元素聚集在一起。通过使用名称空间,名称空间和元素名称的组合被用来标识元素。但是,不重要,使用哪个别名来指向命名空间

必须区分“名称空间”和给定的“别名”

下面的示例将元素
分为两种风格。看看这个:

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);
--仅声明默认命名空间:仅返回默认元素

WITH XMLNAMESPACES(DEFAULT 'DefaultNS')
SELECT a.value(N'(text())[1]',N'nvarchar(max)')
FROM @xml.nodes(N'/root/a') AS A(a);
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"
--.nodes()调用派生命名空间:仅返回派生元素

WITH XMLNAMESPACES(DEFAULT 'DefaultNS')
SELECT a.value(N'(text())[1]',N'nvarchar(max)')
FROM @xml.nodes(N'/root/a') AS A(a);
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!

这是相当翔实的,谢谢你。我复制了这个例子和一些引起怀疑的描述<代码>选择CatalogDescription.query('declare namespace PD=”“;/PD:ProductDescription/PD:Summary')作为Production.ProductModel的结果,其中ProductModelID=19
这是产生疑问的行,请解释“然后在查询体中使用此前缀,而不是命名空间URI”@user3129097,这一行(在我的示例中是
declare namespace x=“DefaultNS”/x:root/x:a
)定义了名称空间的别名。名称空间是
DefaultNS
(在您的示例中是its
schemas.microsoft…
),别名是
x
(在您的示例中是
PD
)。此别名在表达式中用作命名空间前缀,如
/x:root/x:a
(在您的示例中为
/PD:ProductDescription/PD:Summary
)。如果这解决了你的问题,请接受我的答案并投票表决,谢谢@用户3129097,这个问题解决了吗?你需要进一步的帮助吗?请允许我一个提示:如果这个问题得到解决,您将非常感谢,在(最佳)答案的投票柜台下方勾选接受检查。这将1)将此问题标记为已解决2)使追随者更容易找到最佳解决方案3)向回答者支付积分,4)向您支付积分。因为你自己已经越过了15点的边界,你被要求对捐款进行投票。这就是说谢谢的方式。快乐编码!