我有一个看起来像这样的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格式选择和更新此节点?如果是这样,怎么样?
干杯, 马特
答案 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