2012/05/15

XCData を後から追加するには

<name><![CDATA[pinzolo]]></name>
こんな XML を出力したい場合、通常ならばこう書けばいい。
var nameElement= new XElement("name", new XCData(obj.Name));
でも、obj.Name が null の場合、ArgumentNullException が発生する。
そこで、文字列が存在する場合のみ CDATA セクションを追加するようにしたい。
最初はこう書いた。
var nameElement = new XElement("name");
if (obj.Name != null)
{
    nameElement.SetValue(new XCData(obj.Name));
}
しかし、XObject を値にすることはできないという ArgumentException が発生した。
とりあえず次はこうしてみた。
var nameElement = new XElement("name");
if (obj.Name != null)
{
    nameElement.SetValue(new XCData(obj.Name).ToString());
}
こうなった。まあ、当たり前だ。
<name>&lt;![CDATA[pinzolo]]&gt;</name>
他にも正解はあるだろうが、とりあえず正解の一つはこれのようだ。
var nameElement = new XElement("name");
if (obj.Name != null)
{
    nameElement.ReplaceNodes(new XCData(obj.Name));
}
なるほど、置き換えてやるのね。

0 件のコメント :

コメントを投稿