は、この単純な例を見てみましょう指定されたXML名前空間を作成します(デフォルトのxmlnsだけでも)その名前空間を宣言する場合は、SQLでその名前空間を指定するか、結果セットが空になる必要があります。私は2つの方法を知っています:ステートメントをnodes()メソッド呼び出し内に宣言するか、をxmlnamespacesステートメントで宣言します。のは、後者を使用してみましょう:私は今、結果を得るSQL Serverは、デフォルトでは
declare @myXml xml
set @myXML = '
<root xmlns="urn:somename">
<line id="1"/>
<line id="2"/>
<line id="3"/>
</root>';
with xmlnamespaces(default 'urn:somename')
select t.c.query('.')
from @myXml.nodes('/root/line') t(c)
ますが、結果には明確なすごみがあります。指定された名前空間は、デフォルトではなく「p1」として追加されます。だから私の出力は次のようになります。
this Technet articleで<p1:line xmlns:p1="urn:somename" id="1" />
、デフォルトの名前空間の宣言セクションB.は、私が達成しようとしているものを示しているが、私は結果がデフォルトの名前空間を使用してD.建設に示します。私の例はあまり後者に似ていないので、なぜ私はこれらの接頭辞を得ているのか分かりません。
更新: 完全性のために、これはXMLNAMESPACES構文でとまったく同じ症状を与える:
select t.c.query('.')
from @myXml.nodes('declare default element namespace "urn:somename";/root/line') t(c)
は、私はあなたが私がXMLNAMESPACES構文、または宣言文を使用するかどうか、私はまったく同じ症状を取得@wst記事はB. – wst
に示唆するように、あなたのXQueryステートメントでは、デフォルトの要素の名前空間を宣言する必要があると思います。 –
'select'文でデフォルト名前空間を宣言しようとしましたか? – wst