Как удалить xml файл

Обновлено: 06.07.2024

  • Код
  • Название
  • Исполнитель
  • Альбом
  • Продолжительность
  • Жанр

Создание файлов XML

Создадим XML файл нашей базы содержащий несколько тестовых записей уже при помощи LINQ:

Теперь в папке с нашей программой после запуска появится XML файл следующего содержания:


Для создания подобного файла средствами XmlDocument кода понадобилось где-то раза в 2 больше. В коде выше мы воспользовались конструктором класса XDocument, который принимает в качестве параметра перечень дочерних элементов, которыми мы изначально хотим инициализировать документ. Используемый конструктор XElement принимает в качестве параметра имя элемента, который мы создаем, а так же перечень инициализирующих элементов. Удобно то, что мы в этих элементах можем задавать как новые XElement, так и XAttribute. Последние отрендретятся в наш файл как атрибуты самостоятельно. Если вам не нравится использоваться такую вложенность конструкторов и вы считаете такой код громоздким, то можно переписать в более традиционный вариант. Код ниже даст на выходе аналогичный XML файл:

Естественно выбирать необходимый способ нужно по ситуации.

Чтение данных из файла

Сейчас попробуем просто прочитать данные из уже полученного файла и вывести их в удобном для восприятия виде в консоль:

Здесь в коде, думаю, ничего сложного нету и приведены комментарии. После запуска нашей программый в консоли отобразится следующий результат:

Изменение данных

Попробуем пройтись по всем узлам library и увеличить аттрибут Id элемента track на 1.
(дальше писать объявление пути к файлу и результат вывода в консоль я приводить не буду, чтобы не перегружать лишней информацией статью, все компилировал, все работает:) ):

Теперь попробуем это сделать более правильным способом для наших задач:

Как видим – этот способ нам подошел больше.

Добавление новой записи

Добавим новый трек в нашу библиотеку, а заодно вычислим средствами LINQ следующий уникальный Id для трека:

Вот таким подним запросом ко всем элементам вычисляется максимальное значение аттрибута id у треков. При добавлении полученное максимальное значение инкрементируем. Само же добавление элемента сводится к вызову метода Add. Обратите внимание, что добавляем элементы в Root, так как иначе нарушим структуру XML документа, объявив там 2 корневых элемента. Так же не забывайте сохранять ваш документ на диск, так как до момента сохранения никакие изменения в нашем XDocument не отразятся в XML файле.

Удаление элементов

Попробуем удалить все элементы исполнителя DMX:

В этом примере мы вначале выбрали все треки у который дочерний элемент artst удовлетворяет критерии, а потом в цикле удалили эти элементы. Важен вызов в конце выборки ToList(). Этим самым мы фиксируем в отдельном участке памяти все элементы, которые хотим удалить. Если же мы надумаем удалять из набора записей, по которому проходим непосредственно в цикле, мы получим удаление первого элемента и последующий NullReferenceException. Так что важно помнить об этом.
По совету xaoccps удалять можно и более простым способом:

В этом случае приводить к списку наш полученный результат вызовом функции ToList() не нужно. Почему этот способ не использовал изначально описал в комментарии :)

Немного дополнительных запросов к нашей базе треков

Отсортируем треки по продолжительности в обратном порядке:

Отсортируем элементы по жанру, исполнителю, названию альбома, названию трека:

Класс XPathNavigator располагает набором методов, используемых для удаления узлов и значений из XML-документа. Для использования этих методов необходимо сделать редактируемым объект XPathNavigator, то есть установить для свойства CanEdit значение true .

Объекты XPathNavigator для правки XML-документа создаются с помощью метода CreateNavigator класса XmlDocument. Объекты XPathNavigator, созданные классом XPathDocument, доступны только для чтения, и любая попытка вызова методов редактирования объекта XPathNavigator, созданного объектом XPathDocument, приводит к возникновению исключения NotSupportedException.

Дополнительные сведения о доступных только для чтения и изменяемых объектах XPathNavigator см. в руководстве по чтению данных XML с помощью XPathDocument и XmlDocument.

Удаление узлов

Класс XPathNavigator представляет метод DeleteSelf для удаления узлов из XML-документа.

Удаление узла

Класс XPathNavigator представляет метод DeleteSelf для удаления узлов текущего узла, на котором в данное время позиционирован объект XPathNavigator, из XML-документа.

Узел, удаленный с помощью метода DeleteSelf, более недоступен из корня объекта XmlDocument. После удаления узла объект XPathNavigator позиционируется на родительском узле удаленного узла.

Операция удаления не влияет на позицию любого объекта XPathNavigator, позиционированного на удаленном узле. Эти объекты XPathNavigator допустимы в том отношении, что могут перемещаться внутри удаленного поддерева, но не могут быть перенесены в главный узел дерева с помощью обычных методов перемещения по набору узлов класса XPathNavigator.

Метод MoveTo класса XPathNavigator может быть использован для перемещения этих объектов XPathNavigator назад в главный узел дерева или из главного узла дерева в удаленное поддерево.

В следующем примере элемент price первого элемента book файла contosoBooks.xml удаляется с помощью метода DeleteSelf. Позиция объекта XPathNavigator после удаления элемента price - на родительском элементе book .

В примере в качестве входных данных используется файл contosoBooks.xml .

Удаление узла атрибута

Узлы атрибута удаляются из XML-документа с помощью метода DeleteSelf.

Удаленный узел атрибута более недоступен из корневого узла объекта XmlDocument, и объект XPathNavigator позиционируется на родительском элементе.

Атрибуты по умолчанию

Независимо от метода удаления атрибутов, существуют специальные ограничения на удаление атрибутов, определенных как атрибуты по умолчанию в определении DTD или схеме XML для XML-документа. Атрибуты по умолчанию нельзя удалить, если не удален элемент, к которому они принадлежат. Атрибуты по умолчанию всегда присутствуют для элементов с объявленными атрибутами по умолчанию, и в результате удаление атрибута по умолчанию приводит к вставке в элемент атрибута замены, инициируемого с декларированным значением по умолчанию.

Удаление значений

Класс XPathNavigator представляет методы SetValue и SetTypedValue для удаления узлов нетипизированных и типизированных значений из XML-документа.

Удаление нетипизированных значений

Метод SetValue просто вставляет нетипизированное значение string , переданное в качестве параметра, как значение узла, на котором в данный момент позиционируется объект XPathNavigator. Передача пустой строки в метод SetValue удаляет значение текущего узла.

В следующем примере значение элемента price первого элемента book в файле contosoBooks.xml удаляется с помощью метода SetValue.

В примере в качестве входных данных используется файл contosoBooks.xml .

Удаление типизированных значений

Когда тип узла является простым типом XML-схемы W3C, новое значение, вставленное методом SetTypedValue, проверяется по особенностям простого типа, прежде чем будет установлено значение. Если новое значение недопустимо в соответствии с типом узла (например, при установке значения -1 для элемента с типом xs:positiveInteger ), возникает исключение. Методу SetTypedValue также невозможно передать значение null в качестве параметра. В результате удаления значение типизированного узла должно соответствовать типу схемы узла.

В следующем примере значение элемента price первого элемента book в файле contosoBooks.xml удаляется с помощью метода SetTypedValue путем присвоения значения 0 . Значение узла не удаляется, но цена книги удалена в соответствии с ее типом данных xs:decimal .

Узлы пространства имен

Узлы пространства имен нельзя удалить из объекта XmlDocument. Попытки удалить узлы пространства имен с помощью метода DeleteSelf приводят к исключению.

Свойства InnerXml и OuterXml

Свойства InnerXml и OuterXml класса XPathNavigator изменяют XML-разметку узлов, на которых в данный момент позиционируется объект XPathNavigator.

Свойство InnerXml изменяет XML-разметку дочерних узлов, на которых в данный момент позиционируется объект XPathNavigator, разобранный содержимым заданной XML-строки ( string ). Подобным образом свойство OuterXml изменяет XML-разметку дочерних узлов, на которых в данный момент позиционируется объект XPathNavigator, так же как и самого текущего узла.

Сохранение XML-документа

Сохранение изменений, внесенных в объект XmlDocument в результате выполнения описанных в данном разделе методов, выполняется с помощью методов класса XmlDocument. Дополнительные сведения о сохранении изменений, внесенных в объект XmlDocument, см. в руководстве по созданию и сохранению документов.

В этом разделе показано, как использовать классы пакета Open XML SDK 2.5 для Office для удаления части документа (файла) из текстового документа программными средствами.

Для компиляции кода, представленного в этом разделе, требуются следующие директивы сборки.

Пакеты и части документа

Документ Open XML хранится в виде пакета, формат которого определяется спецификацией ISO/IEC 29500-2. Пакет может состоять из нескольких частей со связями между ними. Связь между частями определяет категорию документа. Документ может быть определен как текстовый документ, если его элемент связи пакета содержит связь с основной частью документа. Если соответствующий элемент содержит связь с частью презентации, он может быть определен как презентация. Если соответствующий элемент содержит связь с частью книги, он определяется как электронная таблица. В этот разделе вы будете использовать пакет текстового документа.

Получение объекта WordprocessingDocument

Пример кода начинается с открытия файла пакета с передачей имени файла в качестве аргумента в один из перегруженных методов Open() DocumentFormat.OpenXml.Packaging.WordprocessingDocument, который принимает строку и логическое значение, которое указывает, следует ли открыть файл в режиме чтения и записи. В этом случае значение логической переменной равно true, что указывает, что файл должен быть открыт в режиме чтения/записи.

Рекомендуется использовать оператор using вместо традиционной последовательности .Create, .Save и .Close. Это позволяет обеспечить автоматический вызов метода Dispose (внутреннего метода, используемого пакетом SDK Open XML для очистки ресурсов) при достижении закрывающей скобки. Блок, следующий за инструкцией using, создает область для объекта, создаваемого или именуемого в оператореusing, в данном случае — wordDoc. Так как класс WordprocessingDocument в пакете SDK Open XML автоматически сохраняет и закрывает объект как часть реализации System.IDisposable, а также поскольку метод Dispose вызывается автоматически при выходе из блока, не нужно явно вызывать методы Save и Close, если используется оператор using.

Базовая структура документа WordProcessingML

Базовая структура документа WordProcessingML состоит из элементов document и body. За ними следуют один или более элементов уровня блока, таких как p, который представляет абзац. Абзац содержит один или несколько элементов r. r означает запуск, являющийся областью текста с общим набором свойств, таких как форматирование. Запуск состоит из одного или нескольких элементов t. Элемент t содержит текст. Разметка WordprocessingML для созданного документа показана в следующем примере кода.

С помощью пакета SDK 2.5 Open XML можно создать структуру и содержимое документа, использующие строго типизированные классы, которые соответствуют элементам WordprocessingML. Эти классы можно найти в пространстве имен DocumentFormat.OpenXml.Wordprocessing. В приведенной ниже таблице представлены имена классов, соответствующие элементам document, body, p, r и t.

Элемент WordprocessingML Класс пакета Open XML SDK 2.5 Описание
document Document Корневой элемент основной части документа.
body Body Контейнер для структур уровня блока, таких как абзацы, аннотации, и других, указанных в спецификации ISO/IEC 29500.
p Абзац Абзац.
r Запустить Запуск.
t Текст Диапазон текста.

Элемент Settings

Этот элемент определяет параметры, которые применяются в документ WordprocessingML. Этот элемент является корневым элементом части параметров документа в документе WordprocessingML.
Пример: Рассмотрим следующий фрагмент документа WordprocessingML для части параметров документа:

Элементsettings содержит все параметры для данного документа. В этом случае два примененных параметра являются автоматическими позициями табуляции, увеличенной до 0,5" с помощью элемента defaultTabStop и без сжатия уровня символа пробела с помощью элемента characterSpacingControl.

© ISO/IEC29500: 2008.

Как работает пример кода

После открытия документа в инструкции using в качестве объекта WordprocessingDocument создается ссылка на часть DocumentSettingsPart. Можно проверить, существует ли эта часть, и, если она существует, можно удалить ее из пакета. В данном случае из пакета удаляется часть settings.xml.

Пример кода

Следующий код удаляет часть документа из пакета. Для запуска программы вызовите метод RemovePart, как показано в этом примере.

Перед запуском программы на тестового файла "MyPkg6.docs,", например, откройте файл с помощью Open XML SDK 2.5 Productivity Tool для Microsoft Office и проверьте его структуру. После выполнения программы проверьте файл, и вы заметите, что часть DocumentSettingsPart была удалена.

Есть проект(База данных по книгам)
Программа должна выполнять такие операции:
-добавить книгу
-удалить книгу
-искать книгу
-показать список книг
Список книг находиться в XML файле.
В программировании я недолго,только учусь.
С методом по добавлению и по списку вроде как разобрался,
Помогите написать метод как удалить книгу из Xml файла и как найти.

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь


Как удалить их XML документа пространство имен?
Всем доброго дня!) Как удалить из приведенного ниже XML пространство имен? XDocument xdoc =.


Как выгрузить реквизит документа в XML файл
Добрый день! Подскажите, как выгрузить реквизит документа в XML файл? Создаю новую команду в.

Как удалить ид-файл из документа Person?
Как удалить ид-файл из документа person? Вот такой простой вопрос. На прикрепленном ид-файле в.

Чтение из word-документа и запись в xml-файл
Имеется word-документ , из этого документа необходимо считать данные (например: фио, год и т.д) и.

Tarasis4e, Вы двигаетесь не в том направлении. Рекомендую почитать про сериализацию XML.

Как указать кодировку XML документа?
Что нужно чтобы IE не ругался на русские буквы, загружая XML-документ?


Как извлечь данные из XML документа
Есть XML-документ. Каким образом можно извлечь из него название города, чтобы занести его в.

Как правильно извлечь информацию из xml документа
Здравствуйте подскажите пожалуйста как правильно извлекать инфу из xml документа содержащего такую.

Как получить элемент surface из xml документа
Как получить surfase из xml документа. Далее хочу присвоить string str = "surface"; Выкладывать.


Как добавить данные в xml-файл, используя пространство имен System.Xml.Linq
Допустим, есть файл xml, я его взял из этого треда.

Читайте также: