2017-08-28 7 views
0

xmlのブロックを生成する次のSQLコードがあります。xml属性のエラーコードを削除する - xml(_x003D)のMS SQL

SELECT top 1 
'http://www.crsoftwareinc.com/xml/ns/titanium/common/v1_0' AS [xmlns], 
(SELECT top 1 
count(*)AS 'number-of-accounts', 
-- 
-- TO DO 
-- 
FOR XML PATH('payment-import-header'), TYPE), 
FOR XML RAW ('consumer-payment-import-job'); 

刺殺はこれです:私は属性名から "_x003D" を取り除くことができますどのように enter image description here

? "="または "@"を挿入すると、別のランダム値が追加されます。私はこれらがエラータグであると仮定しています。

おかげ

+0

はこれを試してみてください。https://docs.microsoft.com/en-us/sql/relational-databases/xml/add-namespaces- to-queries-with-xmlnamespaces – Alex

答えて

1

あなたはDEFAULTキーワードで、WITH XMLNAMESPACES句を使用して、デフォルトの名前空間を追加します。

例:結果と

WITH XMLNAMESPACES(DEFAULT 'http://www.crsoftwareinc.com/xml/ns/titanium/common/v1_0') 
SELECT 1 
FOR XML PATH('consumer-payment-import-job'); 

<consumer-payment-import-job xmlns="http://www.crsoftwareinc.com/xml/ns/titanium/common/v1_0">1</consumer-payment-import-job> 
+0

応答のおかげで、これはすべての要素の属性を作成します。私は消費者支払いのインポートジョブでのみ必要です。 –

+0

@aridi悲しいことに、クエリに複数の 'FOR XML'節がある場合、これを行う簡単な方法はありません。複数の「FOR XML」句の各要素に名前空間を追加することを抑止する要求([https://connect.microsoft.com/SQLServer/feedback/details/265956/suppress-namespace-attributes -in-nested-select-for-xml-statements)を使用します。それをアップヴォートすることができれば、将来的に可能にするでしょう。 –

+0

@aridiこの問題を回避するには、文字列関数btwが必要です。これを自分で把握できると確信しています。 –