检索几个 .mp3 的信息并将它们存储到一个 xml 文档中

Posted

技术标签:

【中文标题】检索几个 .mp3 的信息并将它们存储到一个 xml 文档中【英文标题】:Retrieving several .mp3's info and storing them into an xml Document 【发布时间】:2015-10-06 17:06:33 【问题描述】:

我使用 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");   
    

但现在我一直在尝试多种方法来开发相同的程序,其中包含多个 .mp3 文件以存储在同一个 XML 文档中,但它不起作用。

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");   
 

【问题讨论】:

定义不工作。这是一个非常模糊的术语。你有错误吗?文件格式是否错误?等等。 我所说的“不工作”的意思是程序没有编译由于错误“XDocument 结构不正确”。 PD:我解决了代码问题,但现在我的问题是应用程序要求之一需要在单个 xml 中保存多个 mp3 信息。 【参考方案1】:

一个 XML 文档可能只有一个根元素。您正在尝试创建三个。将您的元素放在单个根元素中。

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"));

【讨论】:

以上是关于检索几个 .mp3 的信息并将它们存储到一个 xml 文档中的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CloudKit 中存储和检索音频文件?

使用 localForage 存储和检索音频 (mp3)

在 Windows Phone 中存储和检索 mp3 文件?

从 excel 中检索数据并将其存储在 Access 中

如何从 sqlite 数据库中存储和检索 mp3 文件?

SBT Native Packager - 如何检索 libraryDependencies 并将它们存储为包的一部分?