【问题标题】:C# Xml - Invalid name character; The ' ' character cannot be included in a nameC# Xml - 名称字符无效; ' ' 字符不能包含在名称中
【发布时间】:2014-11-01 10:13:53
【问题描述】:

所以我用 C# 制作了一个音乐播放器。当用户打开一首歌曲时,我希望将其保存到一个 xml 文件中(它保存它的路径、名称和持续时间)。每当我尝试将值发送到进行保存的库时,我都会收到此错误。

MusicLibraryWriter.DatabaseWriter+MyException: System.ArgumentException: Invalid name character in 'Song file path'. The ' ' character, hexadecimal value 0x20, cannot be included in a name.

这是我的代码:

    public string addToDatabasedataBaseInfo( songInfo dataToWrite)
    {
        try
        {

            string newSongPath = dataToWrite.songFilePath;
            XmlWriter databaseWriter = XmlWriter.Create("databaseEdit.xml");
            databaseWriter.WriteStartDocument();
            databaseWriter.WriteStartElement("Songs");
            databaseWriter.WriteElementString("Song file path", newSongPath);
            databaseWriter.WriteElementString("Song duration", dataToWrite.songDuration.ToString());
            databaseWriter.WriteEndElement();
            databaseWriter.WriteEndDocument();
            databaseWriter.Close();
            //databaseWriter.Dispose ();

            mergeDataBase();


            return "Success";
        }
        catch (Exception e)
        {
            throw new MyException(e.ToString());

        }
    }

【问题讨论】:

  • dataToWrite.songFilePath 使用时包含空字符串?
  • @MarvinSmit:那很好 - 问题在于元素 name
  • Doh。太明显了,我错过了。 :) XML 元素名称中不允许有空格。

标签: c# xml database


【解决方案1】:

这就是问题所在:

databaseWriter.WriteElementString("Song file path", newSongPath);

您正在尝试创建一个名称为 Song file path 的元素,这在 XML 中无效。元素名称不能包含空格。你可以使用类似的东西:

databaseWriter.WriteElementString("SongFilePath", newSongPath);

(当然,在此期间您需要做同样的事情。)

请注意,虽然在这种情况下您的代码相当简单,但对于更复杂的 XML,您最好构建一个 XDocument,然后将其保存到磁盘。此外,您应该为您的作者使用using 语句,因此即使出现异常,它也会自动处理。 (然后您可以删除Close 调用。)

还请注意,尽管您的方法名称暗示它会添加一个条目,但实际上它会用其中的一首歌曲完全替换文件。

最后,您应该遵循 .NET 命名约定,以 PascalCase(前导大写字母)命名您的方法和类型。

【讨论】:

  • 感谢您的回答,成功了!至于XDocument,代码还是比较简单的,等我稳定构建之后再找优化。
  • @user220258:这不是优化——它是代码的简化。 XmlWriter 使用起来可能会有些痛苦...特别是,当您尝试添加一个元素时,使用 XmlWriter 执行此操作要比将整个文件读入 XDocument 更难,添加一个元素,然后再次保存整个文档...
  • 现在我会使用XmlWriter,但会看看XDocument,因为Xml 数据库会很重要。
猜你喜欢
  • 2014-12-04
  • 2019-06-02
  • 2015-06-05
  • 2010-11-07
  • 2017-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多