Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Xml-无效的名称字符;'';名称中不能包含字符_C#_Xml_Database - Fatal编程技术网

C#Xml-无效的名称字符;'';名称中不能包含字符

C#Xml-无效的名称字符;'';名称中不能包含字符,c#,xml,database,C#,Xml,Database,所以我用C#制作了一个音乐播放器。当用户打开一首歌时,我希望它被保存到一个xml文件中(它保存它的路径、名称和持续时间)。每当我尝试将值发送到执行保存的库时,我都会收到此错误 MusicLibraryWriter.DatabaseWriter+MyException: System.ArgumentException: Invalid name character in 'Song file path'. The ' ' character, hexadecimal value 0x20, ca

所以我用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());

        }
    }
这就是问题所在:

databaseWriter.WriteElementString("Song file path", newSongPath);
您正在尝试创建一个名为
Song file path
的元素,该元素在XML中无效。元素名称不能包含空格。您可以使用以下内容:

databaseWriter.WriteElementString("SongFilePath", newSongPath);
(当然,在整个过程中,您也需要做同样的事情。)

请注意,尽管在这种情况下,您的代码相当简单,但对于更复杂的XML,您最好先建立一个
XDocument
,然后将其保存到磁盘。此外,您应该为编写器使用
using
语句,这样即使出现异常,也会自动释放该语句。(然后可以删除
Close
调用。)

还要注意的是,尽管方法名暗示它将添加一个条目,但实际上它将完全用其中的一首歌替换文件


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

dataToWrite.songFilePath在使用时包含一个空字符串?@MarvinSmit:那很好-问题出在元素名上。Doh。很明显我错过了XML元素名称中不允许使用空格。谢谢您的回答,它起作用了!至于XDocument,代码仍然很简单,但在我成功地构建了一个稳定的版本之后,我将寻求优化。@user220258:这不是优化,而是代码的简化
XmlWriter
使用起来可能有点痛苦。。。特别是,当您尝试添加一个元素时,使用
XmlWriter
要比将整个文件读入
XDocument
,添加一个元素,然后再次保存整个文档要困难得多……目前我将使用
XmlWriter
,但我将研究
XDocument
,因为Xml数据库将非常重要。