void OutputXmlDocument(Stream outputStream) { XDocument doc = new XDocument( new XElement("Document", new XElement("ParentElement", new XElement("ChildElement", new XAttribute("attr", "attrValue"))))); XmlWriter writer = XmlWriter.Create(outputStream, new XmlWriterSettings { Indent = true } ); doc.Save(writer); }
読み込むのも XmlReader から doc.Load(reader); 程度なのもいいですね。
子要素を読むときは foreach (XElement e in element.Elements()) (特に名前をしていしたい場合は e.Elements(elementName) で。属性なら Attributes() メソッドで) で簡単にループもできますし、DOM っぽいけど DOM より圧倒的に楽、という感じでコードが書けます。
foreach (var v in from t in context.GetTable<Entity>() where t.Type == 1 || t.Type == 2 select new { Id = t.Id, Type = t.Type, Name = t.Name }) { // select 部分で作った匿名型がしっかり IntelliSense で補完される部分 ... }
C/C++そのもの (スコア:1)
って書くとマイナスモデなんだろうなあ。
あんなもんをあえて我慢して使わなきゃならない局面は随分減ってると思うんですけど。
署名スパムがウザい?アカウント作って非表示に設定すればスッキリさ。
Re: (スコア:1)
> あんなもん
の愛用者です。
Cは基礎教養なので、実務で使うか使わないかにかかわらず、避けて通れるものではありませんね。
先日Qt4.5がLGPLで配布されて以来、Qtにはまりました。そしてC++の優位は揺るぎないものと、個人的に確信するに至りました。
我慢するなんてとんでもない。C++とQtに慣れると、C#なんて、めんどくさくて使っていられません。
# ときどき、C++が使えない案件にぶち当たると、C#やJavaを我慢して使う羽目になって、憂鬱になります。
Re:C/C++そのもの (スコア:1)
C# 2.0 以前であれば納得なのですが (特に C# 1.1 とか使ってらんない)、C# 3.0 を使うと C# 3.0 で回せる範囲なら C# 3.0 の方が圧倒的に楽だと思います。
C++ + Qt 4.5 って C# 3.0/.NET Fx 3.5 以上に XML を簡単に扱ったりできますか?
結局適材適所にしか過ぎないと思います。
# テンプレート周りは C++ の天下なのは間違いない。
# ということで、コア部分は C++/CLI でがりごり書いて、C# の方が楽な部分だけ任せるやり方もアリ。
Re:C/C++そのもの (スコア:1)
XMLについては、まだQtで試していないので、詳細はお答えできません。
QtのサンプルのなかにはDOMもSAXもあるのですが、プログラムがやや長めで、わかりにくい気もします。
個人的にはDOMを必要とすることがほとんど無くて、ストリーム型パーサが好きなので、
expatで片付けることが多いです。
.NET 3.0 は、深いところまでは使いこなしていませんが、.NET 2.0 の時代に、SAXパーサが無くて困ったことがあります。
実務では使いませんでしたが、勉強ついでに、ストリーム型パーサをC#で自作して、RSSリーダを作ってみたりしました。
.NET 3.0 ではXMLのサポートが強化されているのでしょうか?
C#のメリットは、プロトタイプやモックアップを突貫工事で作るのには便利だと思います。問題はそれから先、作り込みの段階で、じっくり腰を据えて取り組もうとすると、C++の方が便利だなあと思ったりします。
テンプレートは麻薬です。アルゴリズムの実装とか、大量データ処理をやらせると、これなしでは考えたくないです。
Re:C/C++そのもの (スコア:1)
.NET 3.0ではなくC# 3.0なので。ラムダ式とか使い出すと手放せません。
SAXパーサは確かにないですね。例に挙げられているRSSリーダなら、C# 3.0(.NET 3.5)ではRss20FeedFormatterクラス [microsoft.com]などのシリアライザを使って読み込むだけですよ。
というのは極端な例ですが、そうでなくてもSystem.Xml.Linq名前空間 [microsoft.com]のXLINQも使うと堕落します。
Re:C/C++そのもの (スコア:1)
とりあえず以下の XML 文書を出力するコードを書いてみるだけでも楽さはわかるのではないでしょうか?
C# 3.0 (.NET Framework 3.0 ではなく C# 3.0/.NET Framework 3.5) の場合はこんな感じで。(名前空間は System.IO, System.Xml, System.Xml.Linq を使ってますが省略)
読み込むのも XmlReader から doc.Load(reader); 程度なのもいいですね。
子要素を読むときは foreach (XElement e in element.Elements()) (特に名前をしていしたい場合は e.Elements(elementName) で。属性なら Attributes() メソッドで) で簡単にループもできますし、DOM っぽいけど DOM より圧倒的に楽、という感じでコードが書けます。
# 多分 C# 3.0 で一番堕落する点は getter/setter の自動生成だと思いますが。
Generic がない時代は論外としか言いようがなかったですが、Generic が乗って (2.0) 拡張メソッド + Expression による動的メタプログラミング (3.0) の方向になってくると C# でも十分な点は結構増えてくるように思います。
でも、ここまではやりすぎだと思う例。
Re: (スコア:0)