0

我知道如何使用 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 必须是字符串文字。

必须有一个更简单的方法。

谢谢,

-詹姆士

4

1 回答 1

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
于 2012-09-25T12:47:29.357 回答