2

@newLinksに挿入しようとして@linksいますが、次のSQLでプレフィックス「xsi」を宣言する方法がわかりません。

declare @links xml
set @links = N'<Links/>';

declare @newLinks xml
set @newLinks = N'
<Link xsi:type="CustomLink">
  <Name>Foo</Name>
</Link>
<Link xsi:type="CustomLink">
  <Name>Bar</Name>
</Link>';

set @links.modify('
insert sql:variable("@newLinks")
into (/Links)[1]');

select @links;

上記のSQLを実行すると、次のエラーが発生します。

XML parsing: line 2, character 28, undeclared prefix

私は運が悪かったので次のことを試しました:

set @links.modify('
declare namespace xsi="http://www.w3.org/2001/XMLSchema-instance";
insert sql:variable("@newLinks")
into (/Links)[1]');
4

1 に答える 1

2

xmlnsxml フラグメントで属性を使用して、xsiプレフィックスを定義できます。宣言はすべての子ノードに適用されます。フラグメントにはルート ノードがないため、両方の<link/>要素でルート ノードを定義する必要があります。

declare @newLinks xml
set @newLinks = N'
<Link 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:type="CustomLink">
  <Name>Foo</Name>
</Link>
<Link 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:type="CustomLink">
  <Name>Bar</Name>
</Link>';
于 2011-10-05T00:49:59.000 に答える