- PR -

XML宣言を取り除いてXMLインスタンスのみ取得したい

1
投稿者投稿内容
さわこ
ベテラン
会議室デビュー日: 2003/06/04
投稿数: 71
投稿日時: 2003-11-20 10:45
XML超初心者です!!

今、C#.NETで、以下の作業をしています。
@XMLのテンプレートをLoadして、DBの値をそのカラのXMLにセット
ADBの値が入った値を変更して、またDBにUpdateする

ここでちょっと困っているのは、XML宣言のencodingがutf-8であること。
DBに追加する時に、日本語が入っている場合、utf-8でエンコードされてしまうので、
DBに入った値が文字化けしています。
これをどうにかshift-jisでエンコードしてDBに入れたいのです。

まぁ、、XML宣言のencodingをshift-jisに変えてしまえばいい話なんですが・・・。。
わけあり?であまりshift-jisにしたくないとの事なのです。

希望としては、
<?xml version="1.0" encoding="utf-8" ?>
を取っ払ってしまい、
XMLインスタンスのみをXmlDocumentの中に入れたいのです!

どうやってXML宣言を取り除けばいいのかわかりません!

教えてください!!!

--------------------------------------------------
※コードの中身です!
--------------------------------------------------

objXmlDoc = new XmlDocument();

objXmlDoc.Load( "Template.xml" );

→→→→→→
DB処理 など 省略
←←←←←←


--------------------------------------------------
※Template.xmlの中身です!
--------------------------------------------------

<?xml version="1.0" encoding="utf-8" ?>
<Test>
<group_id />
<group_name />
<flg_del>0</flg_del>
</Test>

かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-11-20 11:16
良くわかんないけど、DB側をutf-8にすることはできないの?

あとこんなの見つけた。.NETといことはWindows環境だということだろうと思われるから、もしかしたら役に立つかも
Atsushi.Eno
ベテラン
会議室デビュー日: 2003/04/23
投稿数: 60
投稿日時: 2003-11-21 00:44
DBにはshift_jisでエンコードして保存したいのに、
XML宣言でshift_jisではないという扱いにしたいというのは
矛盾している気がするんですが、気のせいでしょうか…?
XML宣言にencoding="shift_jis"が無いXML文書は
utf-8やutf-16などのUnicodeでなければ、正しいXMLとして
復元できないと思います。

一応、XML宣言を出力せずに文字列に出力する方法を書いておきます。
(ついでに、任意のエンコーディングで出力する方法も)

コード:

string GetXml (XmlDocument doc)
{
StringWriter sw = new StringWriter ();
XmlTextWriter w = new XmlTextWriter (sw);
// ここで任意のエンコーディング名を出力するには
// 以下のコメントを外します(ウラ技):
// w.WriteProcessingInstruction ("xml",
// "version='1.0' encoding='utf-8'");
foreach (XmlNode n in doc.ChildNodes)
if (n.NodeType != XmlNodeType.XmlDeclaration)
n.WriteTo (w);
w.Close ();
return sw.ToString ();
}



追記:コメント部に間違ったコードを書いちゃったので直しました。
(PIの名前に"xml"を書ける時点でXmlWriter自体が間違ってますが ;-P )

[ メッセージ編集済み 編集者: Atsushi.Eno 編集日時 2003-11-21 03:51 ]
yatcin
会議室デビュー日: 2003/11/21
投稿数: 12
投稿日時: 2003-11-21 01:40
C#は全く分からないしスクリプトも得意ではないのですが、ひとつの文書に複数の文字コードを宣言するのは不可能ですしAtsushiさんのご指摘のようにXML宣言のない文書はUTF-8,16で内部処理されてしまい結局文字化けしてしまいます。

ですのでテンプレート文書とは別にデータ格納用にはサブ文書を用意してテンプレート文書から外部参照する形にする、又はDBへUPDATEするときに何らかの手段で文字エンコードするしかないと思います。

私個人としては前者のほうがすっきりして良いのではないかと思います。
1

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