C # Xml - недопустимый символ имени; Символ '' не может быть включен в имя

1

Итак, я создаю музыкальный плеер на С#. Когда пользователь открывает песню, я хочу, чтобы она была сохранена в 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 содержит пустую строку, когда она используется?
  • 0
    @MarvinSmit: Это было бы хорошо - проблема заключается в названии элемента.
Показать ещё 1 комментарий
Теги:
database

1 ответ

3
Лучший ответ

Это проблема:

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

Вы пытаетесь создать элемент с именем Song file path, и это недействительно в XML. Имена элементов не могут содержать пробелы. Вы можете использовать что-то вроде:

databaseWriter.WriteElementString("SongFilePath", newSongPath);

(Разумеется, вам нужно будет делать то же самое в течение продолжительности.)

Обратите внимание: хотя в этом случае ваш код достаточно прост, для более сложного XML вам, вероятно, будет лучше создавать XDocument а затем сохранять его на диск. Кроме того, вы должны использовать, using выражение для писателя, поэтому он расположен автоматически, даже если есть исключение. (Вы можете удалить вызов Close.)

Также обратите внимание, что, несмотря на то, что ваше имя метода подразумевает, что оно добавит запись, оно фактически заменит файл полностью одной песней в нем.

Наконец, вы должны следовать соглашениям об именах.NET, называя свои методы и типы в PascalCase (ведущая заглавная буква).

  • 0
    Спасибо за ваш ответ, это сработало! Что касается XDocument, код все еще прост, но я поищу оптимизацию после того, как мне удастся сделать стабильную сборку.
  • 0
    @ user220258: Это не оптимизация, а упрощение кода. Использование XmlWriter может быть немного болезненным ... в частности, когда вы пытаетесь добавить элемент, сделать это с XmlWriter будет гораздо сложнее, чем прочитать весь файл в XDocument , добавить элемент, а затем снова сохранить весь документ ...
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню