2014-11-01 255 views
1

因此,我在C#中制作音乐播放器。当用户打开一首歌曲时,我希望它保存到一个xml文件(它保存它的路径,名称和持续时间)。每当我尝试将值发送到执行保存的库时,我都会收到此错误。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()); 

     } 
    } 
+0

dataToWrite.songFilePath在使用时包含空字符串? – 2014-11-01 10:15:32

+0

@MarvinSmit:那会很好 - 它是元素*名称*这是问题所在。 – 2014-11-01 10:19:14

+0

Doh。很显然我错过了它。 :) XML元素名称中不允许使用空格。 – 2014-11-01 10:22:05

回答

3

这就是问题所在:

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

你正在努力创建的Song file path一个名称的元素,这是无效的XML。元素名称不能包含空格。你可以使用类似:

databaseWriter.WriteElementString("SongFilePath", newSongPath); 

(你需要做同样的事情在这段时间里,当然)。

注意,尽管在这种情况下,你的代码是相当简单的,更复杂XML你可能会更好建立一个XDocument,然后将其保存到磁盘。另外,您应该为作者使用using声明,因此即使有异常,它也会自动处理。 (您可以再删除Close电话。)

还要注意的是,尽管你的方法名暗示其将添加一个条目,它实际上是将只在其中的单曲完全替换该文件。

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

+0

谢谢你的回答,它的工作!至于XDocument,代码仍然很简单,但在设法建立稳定版本后,我会寻找优化。 – lyubolp 2014-11-01 10:22:15

+0

@ user220258:这不是最优化 - 它简化了代码。 'XmlWriter'可能会稍微痛苦一点,特别是当你尝试添加一个元素时,用'XmlWriter'做这件事比用整个文件读入'XDocument'要困难得多,添加一个元素,然后再次保存整个文档... – 2014-11-01 10:23:53

+0

现在生病使用'XmlWriter',但不好意思看'XDocument',因为Xml数据库将变得非常重要。 – lyubolp 2014-11-01 10:27:37

相关问题