使用XPath选择名称中包含点的xml节点

时间:2013-04-05 12:31:49

标签: sql-server xpath

我正在尝试使用Sql Server中的XPath选择以下xml文档的Lookup.Result元素的文本节点。

<Commands>
<Command id="1">
<Lookup.Result>Result.OK</Lookup.Result>
</Command>
</Commands>

我尝试以下查询:

declare @xml xml
set @xml = '<Commands>
    <Command id="1">
    <Lookup.Result>Result.OK</Lookup.Result>
    </Command>
    </Commands>
'
select t.c.value('./Lookup&#46;Result/text()[1]', 'varchar(20)')
from @xml.nodes('/Commands/Command') t(c)

但是我收到以下错误: XQuery [value()]:'Lookup'附近的语法错误

我怎么逃避(在XP中使用Lookup.Result元素标记名称中的点)? 请帮助找到解决此问题的优雅方案。 提前感谢您的时间。

2 个答案:

答案 0 :(得分:3)

    declare @xml xml 
    set @xml = '<Commands>
    <Command id="1">
    <Lookup.Result>Result.OK</Lookup.Result>
    </Command>
    </Commands> ' 

    select t.c.value('(./Lookup.Result/text())[1]', 'varchar(20)') 
    from @xml.nodes('/Commands/Command') t(c)

你错过了

  

()

围绕上面的xpath,MSSQL处理。在我的机器上很好

答案 1 :(得分:0)

那么只有5个逃脱字符:

"   &quot;
'   &apos;
<   &lt;
>   &gt;
&   &amp;

所以你需要一个函数来预处理然后另一个函数来发布进程。即在udf ...

中包装5个嵌套的REPLACE语句