XPath在T-SQL中选择XMLNS属性的值

时间:2012-10-22 08:56:31

标签: xml tsql xpath

我有一个看起来像这样的XML文档。它可能是无效的(我没有创建它!)

<ns:url xmlns:ns="http://www.urlone.com/" xmlns:news="http://www.urltwo.com/">
.. node tree
</ns:url>

我需要构建一个T-SQL查询来提取xmlns:news属性的值并进行更新。这需要XPath。但到目前为止我尝试的所有查询都失败了,错误类似于:

  

XPath表达式使用未绑定的名称空间前缀xmlns

是否可以根据XML格式选择和更新此节点?如果是这样,怎么样?

干杯, 马特

2 个答案:

答案 0 :(得分:1)

要获取该值,您可以使用OPENXML边缘表。

declare @XML xml = '
<ns:url xmlns:ns="http://www.urlone.com/" xmlns:news="http://www.urltwo.com/">
</ns:url>'

declare @idoc int

exec sp_xml_preparedocument @idoc output, @XML

select X1.[text]
from openxml(@idoc, '*') as X1
  inner join openxml(@idoc, '*') as X2
    on X1.parentid = X2.id
where X2.localname = 'news' and -- Attribute name
      X2.prefix = 'xmlns' and   -- Namespace
      X2.parentid = 0           -- Attribute on root

exec sp_xml_removedocument @idoc

除了重新创建XML或使用string manipulation之外,我不知道更新URL的方法。

答案 1 :(得分:0)

在XPath数据模型中,名称空间声明转换为命名空间节点,而不是属性节点。所以用于查找新闻命名空间值的XPath表达式是

/*/namespace::news