- PR -

DataSet.GetXml() でXML型データの表示

1
投稿者投稿内容
さいた
会議室デビュー日: 2004/06/27
投稿数: 10
投稿日時: 2006-07-29 22:52
いつもお世話になっております。

ADO.NET2.0とSQLServer2005を使っており、
DBではテーブルの列にXML型を利用しております。
そのテーブルをDataSetへ読込んで、
GetXml()メソッドや、WriteXml()メソッドを使うと、
タグの<>もEntity変換され、全て &lt; &gt; になってしまいます。
なんとかそのまま使いたいのですが、何か良い方法はあるでしょうか。

以下がサンプルコードです。

[TABLE]
use tempdb
create table T1 ( x xml)
insert into T1 values ( '<A />')

[CODE-C#]
DataSet ds = new DataSet();
string conString = "Data Source=.;Initial Catalog=tempdb;Integrated security=SSPI"
string sqlString = "select * from T1";

SqlDataAdapter da = new SqlDataAdapter(sqlString, conString);
da.Fill( ds);
Console.WriteLine( ds.GetXml());

[Result]
&lt;A /&gt;
[Expect]
<A />

代案として、DataSetを継承したクラスを作成しようかと想ってますが、
できれば普通に使いたいと想ってます。
どなたか、何かヒント等ありましたら、是非ご教授頂ければ幸いです。
どうぞ宜しくお願い致します。


[ メッセージ編集済み 編集者: さいた 編集日時 2006-07-29 22:53 ]

[ メッセージ編集済み 編集者: さいた 編集日時 2006-07-29 22:54 ]

[ メッセージ編集済み 編集者: さいた 編集日時 2006-07-29 22:55 ]

[ メッセージ編集済み 編集者: さいた 編集日時 2006-07-29 22:59 ]
がんふぃーるど
ベテラン
会議室デビュー日: 2006/06/05
投稿数: 58
お住まい・勤務地: さいたま
投稿日時: 2006-07-30 03:05
XMLの要素値や属性値に"<"や">"は使用できません。XMLの仕様です。
要素値や属性値に"<"や">"を使用したい場合は &lt; &gt;みたいな
実体参照に置き換えられます。
なので、出力されたXMLを見ると"<"や">"が&lt; &gt;に置き換えら
れています。
XMLを読み込む(解析する)際に&lt;や&gt;の実体参照は元々の文字
("<"や">")に置き換えられるので、読み込んだ後のプログラムでは
ちゃんと"<"や">"と認識できるはずです。
XMLの実体参照等についてはXML&SOA辺り基礎コーナーを読めば載って
いると思います。
さいた
会議室デビュー日: 2004/06/27
投稿数: 10
投稿日時: 2006-08-02 00:10
がんふぃーるどさん、レスをありがとうございます。
えと、、要素のテキストや属性地に < や > を使いたいというのではなく、
"<A />"というデータをDBのテーブルに入れておりまして、
それをDataSetのGetXmlメソッドを使ってXML文書(の文字列)に変換した時に、
&lt; や &gt;になってしまう、という事なのです。

わざわざGetXmlを使わずとも既にXMLだから「?」と想われるかもしれませんが、
実際は他の列と合わせて、DataSetからの一連のXML文書を作成したいと考えております。
例えば、このテーブルのXML列名がXColとすると、
<NewDataSet>
<Table>
<AnyCol>AAAAA</AnyCol>
<XCol><A /></XCol>
</Table>
<Table>
:

</NewDataSet>
という様に、列の値を子要素として利用したいのでした。
すみません、少々サンプルを端折り過ぎたかもしれません。

しかし、ここからは半分自己レスになってしまいますが、
DataSetに保持しているXML型列のDataColumnのTypeが、
System.Stringになっているので、
変換されてしまうのはしょうがない様な気がしてきてます。
なので、面倒がらずにDataSetの拡張クラスを作り、
オーバーロードしようかと考えてます。

お騒がせ致しました、色々ありがとうございましたm(__)m
うにくま
ベテラン
会議室デビュー日: 2005/11/05
投稿数: 82
投稿日時: 2006-08-02 01:17
HttpUtility.HtmlDecode()メソッドで変換できます。
さいた
会議室デビュー日: 2004/06/27
投稿数: 10
投稿日時: 2006-08-02 01:37
うにくまさん、ありがとうございます。
型をとってそれをdomで、、、等と悶々と考えておりましたが、
成るほどっ、なんともシンプルに戻す事ができました!
ありがとうございましたm(__)m
1

スキルアップ/キャリアアップ(JOB@IT)