C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: C#におけるXMLのモダン?な扱いについて


(過去ログ 131 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■77571 / inTopicNo.1)  C#におけるXMLのモダン?な扱いについて
  
□投稿者/ くなーら (8回)-(2015/11/02(Mon) 22:14:03)

分類:[.NET 全般] 


いつもお世話になってます。
タイトルの通り、C#で今風のXML操作について、お伺いしたいと思います。

C#におけるXMLの操作について調べたところ、二通りの書き方が出来るとわかりました。
・Linq To XMLを使用(XDocumentクラス?)
・XmlSerializerクラスを使用

目的によって、どちらの手段を選べばいいのか、というのがあると思います。
こういうときはコッチダヨ〜みたいな。

そこで質問です。
1.これら以外に、C#でXMLを扱う方法はあるか。
2.主流(もしくは現在風)と思われている方法はあるか。
3.この二通りの手段はどういう使い分けをすればいいのか。
何も考えず新しいのを使えばいいのでしょうか......(そんなわけはない、はず)

お手数おかけしますが、よろしければご指導ください。よろしくお願いします。
引用返信 編集キー/
■77572 / inTopicNo.2)  Re[1]: C#におけるXMLのモダン?な扱いについて
□投稿者/ WebSurfer (696回)-(2015/11/02(Mon) 23:44:11)
No77571 (くなーら さん) に返信

> 目的によって、どちらの手段を選べばいいのか、というのがあると思います。

その目的を具体的に書いていただかないと質問者さんが意味する「今風のXML操作」と
いうのことに対して何と答えれば良いか難しいです。

まぁ、自分がそう思うだけかも知れませんけど・・・
引用返信 編集キー/
■77573 / inTopicNo.3)  Re[2]: C#におけるXMLのモダン?な扱いについて
□投稿者/ くなーら (9回)-(2015/11/03(Tue) 03:03:44)
困惑させてしまいすみません。
今自分が書いている書きかけソースのクラスの一部を持ってきました。

public class OnikuData
{
public Oniku info;
}
public class Oniku
{
[XmlAttribute("ブラン○")]
public string nameブラン○;
[XmlElement("StakeHolder")]
public List<string> nameStakeHolder = new List<string>();
}
※投稿するため伏字+カタカナ化

この全く深くない構造のまとまりが、大体百から五百?くらいある想定で、
なるだけ素早く検索、取得したいなァと思っています。

単調な繰り返しに強い手法、って言えば良いのでしょうか。
そういうのがあれば知りたいと思っております。

/*

お肉データじゃなくてご飯データにすれば、
お魚クラスとか色々追加し易そうな感じですね......

*/

引用返信 編集キー/
■77574 / inTopicNo.4)  Re[1]: C#におけるXMLのモダン?な扱いについて
□投稿者/ 魔界の仮面弁士 (550回)-(2015/11/03(Tue) 03:22:23)
No77571 (くなーら さん) に返信
> 目的によって、どちらの手段を選べばいいのか、というのがあると思います。
> こういうときはコッチダヨ〜みたいな。

以下私見:

XmlReader / XmlWriter
 ストリームとして読み書きするクラス。
 そのまま使うよりは、XmlDocument.Load や XDocument.CreateReader など、
 他のクラスとの中継として利用されることの方が多いかもしれません。
 メモリ使用量/処理速度ともに軽快であるのが長所ですが、先頭から末尾に
 順次処理するモデルなので、ランダムアクセス的な処理は苦手です。
 
XmlDocument
 .NET 1.x 当時から使えるベーシックな実装。W3C の DOM API に準拠しており
 (Level 1 Core, Level 2 Core)、他プラットファームの XML パーサーと同様の操作で扱えます。
 変更通知イベントを備えていることから、データソースとして扱うこともでき、汎用性が高いです。
 ただしデータソースになれるぐらいですから、ドキュメント全体がメモリ上に
 ロードしたうえで操作するオブジェクトモデルなので、巨大な XML を扱う際には注意が必要です。
 
XDocument
 いわゆる Linq to XML。自分は大抵これを使っています。
 読み書きとしては比較的簡単ですし、汎用性も高いのですが、
 Linq モデルゆえ、Edit & Continue との相性が悪いのが難点でしょうか。
 なお、Compact Framework には非対応です。
 
XmlSerializer
 メタデータ指定という特性上、大きな構造加工を行うような操作(たとえば XSLT など)の
 ためには使えませんが、XMLデータ全体を一括して読み書きできるのが強みです。
 クラスの内容をXMLに保存し、それをクラスに戻すために使うのには便利ですが、
 初めに XML ありきで、それに対応したクラスを用意するという逆パターンで
 使おうとすると、期待通りのマッピングができずにハマってしまうことも…。
 
DataSet
 DataSet は ReadXml、GetXml、WriteXml メソッドなどを備えています。
 たとえスキーマ付きの XML であっても、XmlDocument や XDocument で取り扱う場合、
 各データは string 型前提で読み書きすることになりますが、型付きDataSet と
 組み合わせれば、型に厳密性を求めることができます。重いのが難点ですが。
引用返信 編集キー/
■77575 / inTopicNo.5)  Re[3]: C#におけるXMLのモダン?な扱いについて
□投稿者/ 魔界の仮面弁士 (551回)-(2015/11/03(Tue) 03:44:37)
No77573 (くなーら さん) に返信
> この全く深くない構造のまとまりが、大体百から五百?くらいある想定で、
> なるだけ素早く検索、取得したいなァと思っています。

出力ではなく、読み取りだけが目的であれば、私なら:

・動的探索なら、XMlDocument で読み取り、XPath 指定して SelectSingleNode / SelectNodes。
・静的な指定が多いなら、XDocument で Linq 使って foreach。

のどちらかを使います。スキーマやらシリアル化クラス作るのが面倒で…。
引用返信 編集キー/
■77581 / inTopicNo.6)  Re[4]: C#におけるXMLのモダン?な扱いについて
□投稿者/ くなーら (10回)-(2015/11/03(Tue) 13:34:30)

こんなに方法があるんですね。DataSetってXML扱えるの......
どれを使えばいいのか迷いそうですが、それぞれの特徴を理解してうまく使っていきたいと思います。
今やってる奴で言えば基本はXDocumentで、時々XmlReader / XmlWriterといった感じになりそうです。

No77575 (魔界の仮面弁士 さん) に返信
> 出力ではなく、読み取りだけが目的であれば、私なら:
>
> ・動的探索なら、XMlDocument で読み取り、XPath 指定して SelectSingleNode / SelectNodes。
> ・静的な指定が多いなら、XDocument で Linq 使って foreach。
>
> のどちらかを使います。スキーマやらシリアル化クラス作るのが面倒で…。

出力もするんですけど、そっちは単純に順に追加していくだけなので。
でも大量のデータを扱うようになったら、一個のブロックを追加するだけでも重くなるんでしょうか......


探し方が悪いのか、バックグラウンドというか、その目的に触れた情報が少なく......
大変助かりました。お教えくださってありがとうございますっ。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -