0

このような XML ドキュメントがあります。無効である可能性があります (私が作成したわけではありません!)。

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

xmlns:news 属性の値を抽出して更新するには、T-SQL クエリを作成する必要があります。これには 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 に答える