0

このコードを実行して、TagLib を使用して .mp3 ファイルから情報を取得し、それを LINQ to XML を使用して XML ドキュメントに表示しました。正しいコードは次のとおりです。

static class Program
{   
    [STAThread]
    static void Main()
    {
        TagLib.File file = TagLib.File.Create(@"path of one of my .mp3 files");
        XDocument xdoc = new XDocument(
            new XDeclaration("1.0", "utf-8", "yes"),
            new XElement("Music", new XAttribute("id", 001),
                new XElement("Album", file.Tag.Album),
                new XElement("AlbumArtist", file.Tag.AlbumArtists),
                new XElement("Title", file.Tag.Title),
                new XElement("Track", file.Tag.Track),
                new XElement("Genre", file.Tag.Genres),
                new XElement("Path", Path.GetFullPath("El Gozo (version acústica).mp3")))
            );
        xdoc.Save(@"C:\Users\ivan_000\Music\Data.xml");   
    }
}

しかし今、同じ XML ドキュメントに複数の .mp3 ファイルを格納する同じプログラムを開発する方法をいろいろ試しましたが、うまくいきません。

static void Main()
{

    TagLib.File file = TagLib.File.Create(@"C:\Users\ivan_000\Music\El Gozo  (version acústica).mp3");
    TagLib.File file2 = TagLib.File.Create(@"C:\Users\ivan_000\Music\En el Trono está.mp3");
    TagLib.File file3 = TagLib.File.Create(@"C:\Users\ivan_000\Music\Por Siempre.mp3");

    XDocument xdoc = new XDocument(
        new XDeclaration("1.0", "utf-8", "yes"),
        new XElement("Music", new XAttribute("id", 001),
        new XElement("Album", file.Tag.Album),
        new XElement("AlbumArtist", file.Tag.FirstAlbumArtist),
        new XElement("Title", file.Tag.Title),
        new XElement("Track", file.Tag.Track),
        new XElement("Genre", file.Tag.FirstGenre),
        new XElement("Path", Path.GetFullPath("El Gozo (version acústica).mp3"))),
        new XElement("Music", new XAttribute("id", 002),
        new XElement("Album", file2.Tag.Album),
        new XElement("AlbumArtist", file2.Tag.FirstAlbumArtist),
        new XElement("Title", file2.Tag.Title),
        new XElement("Track", file2.Tag.Track),
        new XElement("Genre", file2.Tag.FirstGenre),
        new XElement("Path", Path.GetFullPath("Por Siempre.mp3"))),
        new XElement("Music", new XAttribute("id", 003),
        new XElement("Album", file3.Tag.Album),
        new XElement("AlbumArtist", file3.Tag.FirstAlbumArtist),
        new XElement("Title", file3.Tag.Title),
        new XElement("Track", file3.Tag.Track),
        new XElement("Genre", file3.Tag.FirstGenre),
        new XElement("Path", Path.GetFullPath("Por Siempre.mp3")))
    );
    xdoc.Save(@"C:\Users\ivan_000\Music\Data.xml");   
} 
4

1 に答える 1

0

An XML document may only have a single root element. You're attempting to create three. Place your elements within a single root element.

var musicDir = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
var paths = Directory.EnumerateFiles(musicDir, @"*.mp3");
var doc = new XDocument(
    new XElement("root", // place the Music elements under root
        from x in paths.Select((p, i) => new { Path = p, Index = i })
        let file = TagLib.File.Create(x.Path)
        select new XElement("Music",
            new XAttribute("id", x.Index + 1),
            new XElement("Album", file.Tag.Album),
            new XElement("AlbumArtist", file.Tag.FirstAlbumArtist),
            new XElement("Title", file.Tag.Title),
            new XElement("Track", file.Tag.Track),
            new XElement("Genre", file.Tag.FirstGenre),
            new XElement("Path", x.Path)
        )
    )
);
doc.Save(Path.Combine(musicDir, "Data.Xml"));
于 2016-12-28T19:14:38.633 に答える