• ベストアンサー
※ 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

  • Web サイトにあるxmlファイルを更新する方法を教えてください。

    開発環境: Visual Studio .NET 2003 .NET Framework 1.1 言語: C# Web サイトにあるxmlファイルを更新する方法を教えてください。 自作クラスに保持した情報をシリアライズ・デシリアライズしxmlファイルで保存しようとしています。 シリアライズでxmlファイルを更新するのが上手くいきません。 ローカルPCでテストした結果は上手く動作しますが、Web サイトでテストするとエラーが出ます。 エラー内容は、 System.ArgumentException : ストリームに書き込めませんでした。 ===ソースコード始=== //URLを取得する Uri myUri = new Uri ("http://www.**********/test.xml");//URLを指定 XmlUrlResolver resolver = new XmlUrlResolver(); //XmlSerializerオブジェクトを作成 //書き込むオブジェクトの型を指定する System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer( typeof(MyData));//MyDataはオブジェクトの型 //ファイルを開く System.IO.Stream fs = (System.IO.Stream)resolver.GetEntity(myUri, null, typeof(System.IO.Stream)); //シリアル化し、XMLファイルに保存する serializer.Serialize(fs, d_MyData);//d_MyDataはオブジェクト *ココでエラーが出ます。 ===ソースコード終=== Web サイトでのフォルダ権限はフルコントロールに設定しています。

  • cでxmlを使いたい

    c言語を使ってxmlと拡張プロトコルを相互変換する 仕事をしています。そこで、xmlの利用を容易にする ライブラリ等いい方法はありませんでしょうか。 たとえばC#ならXmlElementクラスなど。 もしご存知でしたら、ご教授お願いします。

  • XMLのスタイルシートで単独タグを発見したい

    こんにちは XMLファイルをブラウザで見やすく表示するためにスタイルシートを使っているのですが、XMLファイル中に登場する単独タグを見つけて、その部分で改行するスタイルシートの書き方がわかりません。 XML中に <LineBreak />という単独タグが登場した場合に HTML出力として <br />を入れたいのです。 スタイルシートはどのようにしたらよいでしょうか?

    • ベストアンサー
    • XML
  • XMLドキュメントが開けない

    ダウンロードしたファイル(拡張子?XML)を開こうとすると「XSLスタイルシートを使用したXML入力は表示できません。エラーを訂正してください」と表示されます。初心者で意味がわからずどのように対応すればいいのか、エラーを訂正するとはどのような方法なのか等をお教えいただけますようお願いします。受験関連の内容だとは思えるのですが開かないものですから、困っています。よろしくお願いします。

  • XMLデータの変換

    C#で作業を行っております。XMLデータをあるテキストファイルデータ(独自フォーマット)への変換プログラムを作成予定です。 JAVAのVelocityのようなテンプレートベースの変換ができるクラスはC#にあるのでしょうか。 XML用のクラスでデータを読み込み、独自フォーマットのテキスト出力用のコードはゴリゴリと書いていかなければならないのでしょうか?(←これを避けたいのです) スマートな方法をご存知でしたら、お教えください。

    • 締切済み
    • XML
  • XMLからデータセットへ

    こんにちは 初めての質問です。 今XML形の文字列があります。 string strXML = @" <dataset1> <table1> <column1>a</column1> <column1>b</column1> <column1>c</column1> <column1>d</column1> <column1>e</column1> <column1>f</column1> </table1> </dataset1>"; この文字列をXMLファイルとして保存します。 XmlDocument xml = new XmlDocument(); xml.LoadXml(strXML); xml.Save(@"C:\test.xml"); 保存したXMLファイルをデータセットで読み込みます。 DataSet ds = new DataSet(); ds.ReadXml(@"C:\test.xml"); 以上の流れでデータセットの作成はできますが、 一回XMLファイルを保存しないといけません。 何とか保存しないで、文字列から直接データセットを生成する方法はありますか? よろしくお願いします。

    • ベストアンサー
    • XML
  • XMLページについて

    インターネットからある文書をDLして閲覧し、それを「名前をつけて保存」に保存し後日マイ、ドキュメントのそのアイコンをクリックして開こうとしたら「XMLページを表示できません。」「XSLスタイルシートを 使用したXML入力は表示出来ません。エラーを訂正して下さい。」との 表示が出ました。 エラーの訂正の方法が解りません。 ご教示くださるようお願い致します。 Windows XP SP3 HE (SOTEC)

  • シリアライズしたオブジェクトの文字列取得

    シリアライズしたオブジェクトのバイナリデーターを DB登録やViewStateのごとく扱いたいと思っています。 手順としては 1.シリアライズ可能なオブジェクトを作成 2.1のオブジェクトをシリアライズ(バイナリデータ取得・ファイル書き込みはしない) 3.2のバイナリデーターをbase64エンコード 4.DBなどへ保存 といった手順で考えています。 手順2でシリアライズしたデータを バイナリで取得する方法がわかりません(ファイル出力やXML出力は サンプルがたくさん見つかりますが。) 以上、宜しくお願いします

    • ベストアンサー
    • Java
  • EXCEL2003で出力したXMLの表示

     お世話になります。  EXCEL2003では、XMLファイルとして保存することが可能です。  出力したXMLファイルを開くとEXCEL2003がインストールした端末では、 IEでEXCELのシートイメージで表示可能ですが、インストールされていない 端末では表示ができません。(XMLソースとして表示されます。)  EXCEL2003をインストールせずにブラウザで表示する方法は、 あるでしょうか?

  • XMLファイルの表示について

    ダウンロードしたXMLファイルを表示させようとすると(ie6)ブラウザは立ち上がるのですがXMLページを表示できません。 XSLスタイルシートを使用したXML入力は表示できませんエラーを訂正してくださいと表示されます。ホームページに接続している時は表示していますがPCに保存して見ようとするとだめです。どのようにすればよいのでしょうか。よろしくお願いいたします。

    • 締切済み
    • XML