• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C#でXMLの読み取り書き取りについて)

C#でXMLの読み取り書き取りについて

このQ&Aのポイント
  • C#からXMLの読み取りと書き取りについて困っています。指定のXMLを読み込んで内容を書き換え、保存する方法を知りたいです。
  • XMLの読み取りと書き取りについて困っています。現在はテキストストリームを使ってXMLを読み込み、XMLシリアライズによってクラスにセットしています。しかし、読み込んだXMLの一部が欠けてしまっています。解決策を教えてください。
  • 問題として、C#からXMLを読み取り書き取りしている際に、読み込んだXMLにDOCTYPEやstyle-sheetの情報が欠けてしまっています。何か解決策はありますか?XMLのノードを一つ一つif文で精査する必要はありませんか?

質問者が選んだベストアンサー

  • ベストアンサー
回答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]を保存する つまり,大枠だけ残して,中身を入れ替えてしまうのです。 ただし,ルート要素の属性にマッピングするプロパティが存在した場合,この方法は使えません (その部分だけを自分でコピーすれば別です)。

calm_noisy
質問者

補足

ご回答ありがとうございます。 因みにですが、どのようにやるのかサンプルなどを提供 していただくことは可能でしょうか? 3. [MS]からXmlDocumentに読み込む [XD2] 4. [XD1]から,ルート要素の内容をすべて削除する 5. [XD2]のルート要素の内容をすべて[XD1]のルート要素の内容としてコピーする 上記の3点の方法が特にわかりません。

その他の回答 (1)

回答No.2

> 3. [MS]からXmlDocumentに読み込む [XD2] var xd2 = new XmlDocument(); // [XD2] xd2.Load(ms); // ms : [MS] →http://msdn.microsoft.com/ja-jp/library/e48zttz7.aspx > 4. [XD1]から,ルート要素の内容をすべて削除する > 5. [XD2]のルート要素の内容をすべて[XD1]のルート要素の内容としてコピーする xd1.DocumentElement.InenrXml = xd2.DocumentElement.InnerXml; http://msdn.microsoft.com/ja-jp/library/system.xml.xmldocument.innerxml.aspx

calm_noisy
質問者

お礼

返答が大変遅くなってしまい申し訳ございませんでした。 Yune-Kichi様の方法で試したところ、 正しくXMLを出力することができました。 ありがとうございます。 今後も、何かありましたら宜しくお願いいたします。

関連するQ&A

専門家に質問してみよう