■
XML宣言がXDocument(XElement)のsaveメソッドを読んだときにしか追加されない(オブジェクト自体に追加されるわけではなく、保存されたファイルに追加される)ので、結局StringBuilderでXMLを書いています。XDocumentの方から宣言を設定もしくは取得するプロパティも有るんだけど、それを使ってもダメ。これはどうすれば。。。
はてなダイアリーにAtomPudで投稿する - INOHILOG
もうちょっと親切なクラスであれば嬉しいんですが、どうやらSaveメソッドを呼ぶしか無いみたい?(他にあれば伝授してください!)なのですが、ファイルではなくStringBuilderに出力することもできるので以下のように書けます。
var sb = new StringBuilder(); var settings = new XmlWriterSettings() { Indent = true, OmitXmlDeclaration = false }; // ここはほぼそのままコピペ XNamespace xname = "http://purl.org.atom/ns#"; XDocument doc = new XDocument( new XDeclaration( "1.0", "utf-8", "no" ), new XElement( xname + "entry", new XElement( "title", "title2" ), new XElement( "content", new XAttribute( "type", "text/plain" ), "content2" ), new XElement( "updated", DateTime.Now.ToString( "o", new System.Globalization.CultureInfo( "ja-jp" )))) ); using ( XmlWriter writer = XmlWriter.Create( sb, settings ) ) { Console.WriteLine( doc.Declaration ); Console.WriteLine(); doc.Save( writer ); writer.Flush(); Console.WriteLine( sb ); }
<?xml version="1.0" encoding="utf-8" standalone="no"?> <?xml version="1.0" encoding="utf-16" standalone="no"?> <entry xmlns="http://purl.org.atom/ns#"> <title xmlns="">title2</title> <content type="text/plain" xmlns="">content2</content> <updated xmlns="">2008-09-14T01:55:49.0410000+09:00</updated> </entry> 続行するには何かキーを押してください . . .
しかしなぜか出力のencoding部分がおかしいです!必ずutf-16になってしまう。
色々試してみたけどダメだった。何がおかしいのでしょう。。。
XDeclaration.ToString()+XDocument.ToString()の方が早い気がしてきた今日この頃。