gpt4 book ai didi

sql-server - SQL Server 2005 Xquery 命名空间

转载 作者:数据小太阳 更新时间:2023-10-29 02:52:34 25 4
gpt4 key购买 nike

我正在尝试从 Xml 数据类型中获取一些值。数据如下:

<Individual xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<FirstName xmlns="http://nswcc.org.au/BusinessEntities.Crm">Lirria</FirstName>
<LastName xmlns="http://nswcc.org.au/BusinessEntities.Crm">Latimore</LastName>
</Indvidual>

请注意元素 FirstName 和 LastName 中存在 xmlns - 这是在我们通过序列化 C# 业务对象创建 xml 时添加的。无论如何,元素中这个 namespace 的存在似乎导致 XQuery 表达式失败,例如:

SELECT MyTable.value('(//Individual/LastName)[1]','nvarchar(100)') AS FirstName

这将返回空值。但是,当我从 xml 中的元素中删除命名空间时(例如,使用 Replace T-SQL 语句),上面的代码会返回一个值。但是必须有更好的方法 - 是否有一种方法可以使此查询工作,即无需先更新 xml?

谢谢

约翰·戴维斯

最佳答案

您需要正确命名要选择的元素。参见 Adding Namespaces Using WITH XMLNAMESPACES .下面是一个使用您的 XML 的示例:

declare @x xml;
set @x = N'<Individual
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<FirstName xmlns="http://nswcc.org.au/BusinessEntities.Crm">Lirria</FirstName>
<LastName xmlns="http://nswcc.org.au/BusinessEntities.Crm">Latimore</LastName>
</Individual>';

with xmlnamespaces (N'http://nswcc.org.au/BusinessEntities.Crm' as crm)
select @x.value(N'(//Individual/crm:LastName)[1]',N'nvarchar(100)') AS FirstName

关于sql-server - SQL Server 2005 Xquery 命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1586926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com