C#Xml-无效的名称字符;'';名称中不能包含字符
所以我用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
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数据库将非常重要。