やっていなかったことの一つに名前空間があります。ここではプレフィックスを持つ名前空間を宣言してみます。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
 
namespace TestLinqToXML
{
    public class CreateXML
    {
        public XDocument createTestData() {
            var settings = new XDocument(
                new XDeclaration("1.0", "utf-8", "yes"));
            settings.Add(new XElement("LogClientSettings", 
                new XAttribute(XNamespace.Xmlns + "xsi", 
                "http://www.w3.org/2001/XMLSchema-instance"),
                new XAttribute(XNamespace.Xmlns + "xsd", 
                    "http://www.w3.org/2001/XMLSchema")));
            settings.Root.Add(new XElement("DatabaseName", 
                "TestDatabase"));
            XElement list = new XElement("GridSettings");
            XElement temp = new XElement("GridSetting");
            temp.Add(new XElement("PointId", 1));
            temp.Add(new XElement("ControlName", "dbGrid1"));
            temp.Add(new XElement("ColumnNumber", 1));
            temp.Add(new XElement("Description", "あの"));
            list.Add(temp);
            settings.Root.Add(list);
 
            
            return settings;
        }
    }
}
肝は15行と17行です。XAttributeでつけるんですね。(当たり前ですね)
結果はこんな感じです。
TestDatabase 1 dbGrid1 1 あの 
このほかLinq to XMLでの名前空間について詳しくは以下のMSDNドキュメントをお読みください。

 

コメント