0

我有一个看起来像这样的 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 格式的情况下选择和更新此节点?如果是这样,怎么做?

干杯,马特

4

2 回答 2

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 或使用字符串操作之外,我不知道有什么方法可以更新 URL 。

于 2012-10-22T09:36:59.237 回答
0

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

/*/namespace::news
于 2012-10-22T11:29:45.770 回答