![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
C#からXMLの読み取りと書き取りについて困っています。
◆開発言語
C# (Visual Studio 2008)
◆現在の仕様
1.指定のXMLを読み込みます
⇒ テキストストリームを使ってファイルを読み取り
XMLシリアライズにてクラスにセットしています。
2.XMLの内容を書き換えます
⇒ 指定タグの内容を書き換えます。
3.XMLを保存します
⇒ XMLデシリアライズを用いて
XMLの内容がセットされているクラスから
XMLファイルに出力します。
◆問題点
ここで、「1.指定のXMLを読み込みます」にて
XML内にあるDOCTYPEや、style-sheet等の情報が
ごっそりかけてしまっています。
そのため、「3.XMLを保存します」では
DOCTYPEや、style-sheet部分がかけています。
◆解決したい方法
シリアライズなどを用いているとXMLのノードを一つ一つ
if文で精査する必要がないので、助かっています。
既存のままで、DOCTYPEや、style-sheetを読み取ち、出力する
方法は無いのでしょうか?
※上記が不可能であれば、その他の方法でも構いません。
No.1ベストアンサー
- 回答日時:
シリアライズというのは,あくまでオブジェクトをバイト列に変換するための手法です。
XmlSerializerは,バイト列の表現にXMLを使っているだけです。
XMLの読み込みであれば,本来はXmlDocumentやXPathDocument,XDocumentなどを利用すべきです。
さて,どうしてもシリアライズを使うのであれば,書き込み時に上記のクラスと組み合わせて使うことを考えてみてはどうでしょうか。
手順)
1. オブジェクトをMemoryStreamにXMLシリアライズする [MS]
2. 元のXMLをXmlDocumentに読み込む [XD1]
3. [MS]からXmlDocumentに読み込む [XD2]
4. [XD1]から,ルート要素の内容をすべて削除する
5. [XD2]のルート要素の内容をすべて[XD1]のルート要素の内容としてコピーする
6. [XD1]を保存する
つまり,大枠だけ残して,中身を入れ替えてしまうのです。
ただし,ルート要素の属性にマッピングするプロパティが存在した場合,この方法は使えません (その部分だけを自分でコピーすれば別です)。
この回答への補足
ご回答ありがとうございます。
因みにですが、どのようにやるのかサンプルなどを提供
していただくことは可能でしょうか?
3. [MS]からXmlDocumentに読み込む [XD2]
4. [XD1]から,ルート要素の内容をすべて削除する
5. [XD2]のルート要素の内容をすべて[XD1]のルート要素の内容としてコピーする
上記の3点の方法が特にわかりません。
No.2
- 回答日時:
> 3. [MS]からXmlDocumentに読み込む [XD2]
var xd2 = new XmlDocument(); // [XD2]
xd2.Load(ms); // ms : [MS]
→http://msdn.microsoft.com/ja-jp/library/e48zttz7 …
> 4. [XD1]から,ルート要素の内容をすべて削除する
> 5. [XD2]のルート要素の内容をすべて[XD1]のルート要素の内容としてコピーする
xd1.DocumentElement.InenrXml = xd2.DocumentElement.InnerXml;
http://msdn.microsoft.com/ja-jp/library/system.x …
返答が大変遅くなってしまい申し訳ございませんでした。
Yune-Kichi様の方法で試したところ、
正しくXMLを出力することができました。
ありがとうございます。
今後も、何かありましたら宜しくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- XML XML同じ名前の要素を自動で集約するツール 1 2022/04/11 09:21
- WordPress(ワードプレス) ワードプレスにて .xmlファイルの使い方をご存知の方、よろしくお願いいたします。 2 2022/09/30 00:55
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- AJAX 自作の地図をグーグルマップのようにしたい 3 2022/11/15 11:53
- アプリ おすすめのパスワード管理アプリを教えてください。(iOSとWindows対応) 4 2023/01/19 02:08
- HTML・CSS ホームページのHTMLサイトマップを自動作成する方法を探しています。 1 2023/05/17 21:36
- その他(IT・Webサービス) 見たことのない形式で日付が表示されているのでそれを解析してほしい 3 2023/01/23 16:53
- 数学 この数学問題、スマートに解く方法を教えてください。 3 2023/01/26 23:17
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
XPathで途中に名前空間が設定さ...
-
VBAでXML文書のある特定タグ以...
-
ホームページ作成 アンカーと...
-
XmlをDetaSetに読み込んだ場合...
-
CPUの考え方を教えてください ...
-
XMLで要素が記述された順番に意...
-
XML、XSLTの適応エラー(IEから...
-
昔Winnyってありましたけど、あ...
-
文字列の取得
-
特殊記号が勝手にエスケープさ...
-
XML同じ名前の要素を自動で集約...
-
アルゴリズム
-
XMLで主キーを自動的に入力する...
-
東芝のDynabookなのですがアン...
-
rdfをIE7に認識させるには
-
Excel-VBAでXMLの複数ノードの...
-
HTTPステータス 404 - There is...
-
XSLで特定のタグだけを出力する...
-
<xsl:apply-templates />単独
-
TreeViewの再表示のちらつきを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XPathで途中に名前空間が設定さ...
-
VBAでXMLを出力するプログラム...
-
XMLファイル内のデータ(値)を変...
-
VB6でXMLを作成しているのです...
-
VBAでXML文書のある特定タグ以...
-
XMLDocumentでスキーマを無視し...
-
WebBrowser1.Document.Body.Inn...
-
XMLの要素の内容の中に要素
-
エクセルVBA ウェブ上のボタ...
-
XmlをDetaSetに読み込んだ場合...
-
LoadCML
-
C#でXMLファイルの情報にアクセ...
-
CPUの考え方を教えてください ...
-
東芝のDynabookなのですがアン...
-
XMLで要素が記述された順番に意...
-
昔Winnyってありましたけど、あ...
-
UTF-8でエンコーディングとはど...
-
バッチファイルでテキストファ...
-
ルート要素ノードが2個ある場合?
-
Excel-VBAでXMLの複数ノードの...
おすすめ情報