0

XMLコードを本文としてdbmailを送信しようとしています。以下のコードが同じことを示しています。

declare @xml xml  = '<?xml version="1.0"?>
<Order>
<Date>2003/07/04</Date>
<CustomerId>123</CustomerId>
<CustomerName>Acme Alpha</CustomerName>
<Item>
<ItemId> 987</ItemId>
<ItemName>Coupler</ItemName>
<Quantity>5</Quantity>
</Item>
<Item>
<ItemId>654</ItemId>
<ItemName>Connector</ItemName>
<Quantity unit="12">3</Quantity>
</Item>
<Item>  
<ItemId>579</ItemId>
<ItemName>Clasp</ItemName>
<Quantity>1</Quantity>
</Item>
</Order>'

--SELECT @xml

declare @bodyprep varchar(max)  

select @bodyprep  = cast(@xml as varchar(max))

EXEC msdb. dbo.sp_send_dbmail

                              @profile_name='Profile-A' ,
                              @recipients ='.com',
                              @from_address = '.com' ,
                              @subject = 'test',
                              @body = @bodyprep

しかし、受信したメールは以下のように整列されていません。

<Order><Date>2003/07/04</Date><CustomerId>123</CustomerId><CustomerName>Acme Alpha</CustomerName><Item><ItemId> 987</ItemId><ItemName>Coupler</ItemName><Quantity>5</Quantity></Item><Item><ItemId>654</ItemId><ItemName>Connector</ItemName><Quantity unit="12">3</Quantity></Item><Item><ItemId>579</ItemId><ItemName>Clasp</ItemName><Quantity>1</Quantity></Item></Order> 

上記の XML コードをフォーマットまたはインデントする方法はありますか?

以下に示すようにフォーマットされたコードを送信したいのですが、

<Order>
  <Date>2003/07/04</Date>
  <CustomerId>123</CustomerId>
  <CustomerName>Acme Alpha</CustomerName>
  <Item>
    <ItemId> 987</ItemId>
    <ItemName>Coupler</ItemName>
    <Quantity>5</Quantity>
  </Item>
  <Item>
    <ItemId>654</ItemId>
    <ItemName>Connector</ItemName>
    <Quantity unit="12">3</Quantity>
  </Item>
  <Item>
    <ItemId>579</ItemId>
    <ItemName>Clasp</ItemName>
    <Quantity>1</Quantity>
  </Item>
</Order>

ありがとう

4

1 に答える 1

0

msdb.dbo.sp_send_dbmailには追加のパラメーター があり@body_format = 'HTML'、適切な HTML マークアップで XML を装飾すると、XML を好きなように表示できます。これが、電子メール本文の外観を指定したレベルに制御できる唯一の方法です。つまり、適切なインデントと色分けを使用します。

色分けしなくてもよい場合@body_format = 'TEXT'(デフォルト) は問題ありませんが、いずれにせよ、指定したとおりにインデントするために手を加える必要があります。

于 2013-10-04T19:17:16.950 に答える