0

次のようないくつかの空のノードに続くxmlがある場合。

<TAG ID="abc"></TAG>

このxmlを変更/選択すると、次のような空のタグが返されます

<TAG ID="abc" />

のように閉じて空のタグを閉じ</TAG>たい

これを達成できますか...?

4

3 に答える 3

2

SQL Server での XML 結果のシリアル化は、XQuery 自体ではなく、XML データ型から文字列表現への変換によって決定されることに注意してください。あなたの例では

DECLARE @X XML; SET @X = '<TAG ID="abc"></TAG>'; SELECT @X;

XQuery を使用しておらず、XML パーサーと XML シリアライザーを使用しているだけです。

したがって、XQuery vNext のシリアル化オプションを追加しても、影響はありません。

Michael Kay が言及しているように、2 つの連載に違いはありません。なぜ両者を区別したいのですか?そのような差別化が必要なツールをお持ちの場合は、パーサーが標準に準拠するように変更するよう依頼することをお勧めします。または、空のコンテンツ要素をシリアル化する方法のオプションを提供する XML パーサー/シリアライザーがクライアント側にあるかどうかを確認してください。

データベースで XML Infoset の忠実度ではなく完全な語彙の忠実度が必要な場合は、XML を varbinary(max) に格納することをお勧めします。クエリ処理を行うために XML にキャストします。

敬具マイケル

于 2012-04-06T20:09:25.050 に答える
1

XML を使用するすべてのアプリケーションは、 と を同等のものとして扱う必要があります。したがって、XQuery プロセッサは、それらが同等であり、ユーザーが一方の形式を他方より優先する正当な理由がないと想定します。(同様に、たとえば、属性を二重引用符ではなく一重引用符で囲むことや、「=」記号の周りにスペースを追加することを要求することもできません。)

于 2012-04-05T18:08:12.033 に答える
0

多くのXQuery3.0プロセッサ(BaseX、Saxonなど)では、シリアル化オプションとして「html」を指定できます。これにより、空の要素が期待どおりに出力されます。

declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
declare option output:method "html";
<TAG ID="abc"></TAG>

ただし、XQuery3.0がSQLServerでサポートされるのはいつか、またはサポートされるかどうか、またはシリアル化のデフォルトを変更する別の方法を提供するかどうかはわかりません。

于 2012-04-05T11:51:51.030 に答える