Как написать Столбец Datatable для XML с несколькими настройками? - PullRequest
2 голосов
/ 02 апреля 2012

У меня есть память Datatable, как это.

datatable

Я хочу создать XML-файл, подобный этому.

xml

URL-адрес (например, http: \ www.mymusicwebsite.com \ songs) всегда будет одинаковым. Может ли кто-нибудь научить меня, как мне этого добиться?

Большое спасибо.

L

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

Самый простой способ - использовать LINQ to XML, например:

XDocument xmlDoc = new XDocument(
   new XDeclaration("1.0", "UTF-8", "yes"),
      new XElement("smil",
         new XElement("body",
            new XElement("seq",
               from row in SongsDataTable.AsEnumerable()
               select new XElement("media", 
                  new XAttribute("src", "http://www.mymusicwebsite.com/songs/" + row.Field<string>("filename")
            )
         )
      )
   )
);
1 голос
/ 02 апреля 2012

Использование LINQ-to-XML:

// test items set, you need change to the column accessor
// like dataTable.Rows[2] or dataTable.Rows["fileName"]
// or row.Field<string>("filename") as noted by Mentoliptus
IList<string> items = new List<string> { "song1.mp3", "song2.mp3", "song3.mp3" };

XmlWriterSettings xws = new XmlWriterSettings();
xws.OmitXmlDeclaration = true;
xws.Indent = true;

// You can output to file or even in a string
using (var stream = File.Create(@"C:\test.xml"))
using (XmlWriter xw = XmlWriter.Create(stream, xws))
{                
    var xml = new XElement("smil",
        new XElement("body",
            new XElement("seq",
                items.Select(c => new XElement("media", 
                                   new XAttribute(
                                       "src",
                                       String.Format("http:\\\\www..mysite.com\\songs\\{0}", c)))))));

    xml.Save(xw);
}

Вывод:

<smil>
  <body>
    <seq>
      <media src="http:\\www..mysite.com\songs\song1.mp3" />
      <media src="http:\\www..mysite.com\songs\song2.mp3" />
      <media src="http:\\www..mysite.com\songs\song3.mp3" />
    </seq>
  </body>
</smil>
...