(hatena (diary ’Nobuhisa)) このページをアンテナに追加 RSSフィード Twitter

08/09/14 :

[][]

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()の方が早い気がしてきた今日この頃。

InoHiroInoHiro 2008/09/18 01:35 言及ありがとうございます。コメントが遅くなってしまいましたが、XDocument/XElementあたりで気になるところがいくつかあるので、また書こうと思います。

NobuhisaNobuhisa 2008/09/19 03:11 Saveメソッド使いにくいね。。。笑
日記楽しみにしてます!

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/Nobuhisa/20080914/1221326352