我知道如何使用xpath和定义名称空间从XML字段中选择值,但我需要使用多个xpath查询并将它们分配给我的选择。有没有比做以下更简单的方法:
SELECT
id, name,
[XML].value('declare namespace test="http://www.test.org/xml/";
declare namespace test2="http://www.test2.org";
(//test:Address[1][test2:Global=1]/test:Street)[1] ', 'varchar(max)') AS streetLocation1,
[XML].value('declare namespace test="http://www.test.org/xml/";
declare namespace test2="http://www.test2.org";
(//test:Address[2][test2:Global=1]/test:Street)[1] ', 'varchar(max)') AS streetLocation2
FROM
TEST
我想替换
'declare namespace test="http://www.test.org/xml/";
declare namespace test2="http://www.test2.org";'
使用变量。我试图附加字符串,但我得到以下内容:
XML数据类型方法“value”的参数1必须是字符串文字。
必须有一种更简单的方法。
谢谢,
-James
答案 0 :(得分:1)
感谢@MikaelEriksson,
如果有人有类似的问题。这是答案。
;WITH XMLNAMESPACES ('http://www.test.org/xml/' as test, 'http://www.test.org/xml/' as test2)
SELECT id,
name,
[XML].value('(//test:Address[1][test2:Global=1]/test:Street)[1] ', 'varchar(max)') AS streetLocation1,
[XML].value('(//test:Address[2][test2:Global=1]/test:Street)[1] ', 'varchar(max)') AS streetLocation2
FROM TEST