Как добавить строку в файл xml

Обновлено: 07.07.2024

Правила синтаксиса XML крайне просты и логичны. Их легко запомнить и легко использовать.

Все XML элементы должны иметь закрывающий тег

В HTML некоторые элементы могут не иметь закрывающего тега:

В XML нельзя опускать закрывающий тег. Абсолютно все элементы должны закрываться:

Возможно, вы заметили из предыдущих примеров, что XML декларация не имеет закрывающего тега. Это не ошибка. Дело в том, что декларация не относится к XML документу, поэтому у нее и нет закрывающего тега.

Теги XML регистрозависимы

Теги XML являются регистрозависимыми. Так, тег <Letter> не то же самое, что тег <letter>.

Открывающий и закрывающий теги должны определяться в одном регистре:

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

XML элементы должны соблюдать корректную вложенность

В HTML иногда можно наблюдать такую картину:

и иногда это даже работает должным образом.

В XML все элементы обязаны соблюдать корректную вложенность:

Понятие "корректная вложенность" по отношению к приведенным примерам просто означает, что так как элемент <i> открывается внутри элемента <b>, то и закрываться он должен внутри элемента <b>.

У XML документа должен быть корневой элемент

XML документ должен содержать один элемент, который будет родительским для всех других элементов. Он называется корневым элементом.

XML пролог

Следующая строка называется XML прологом:

XML пролог необязателен. Но если он есть, то это должна быть первая строка XML документа.

В XML документе могут присутствовать международные символы, вроде русских букв, и чтобы не возникало ошибок необходимо указать кодировку, либо сохранить XML файл в формате UTF-8.

UTF-8 — кодировка XML документов по умолчанию.

Значения XML атрибутов должны заключаться в кавычки

Так же, как и в HTML, у XML элементов могут быть атрибуты в виде пары имя/значение.

В XML значения атрибутов должны заключаться в кавычки.

Посмотрите на следующие два примера XML документа. Первый с ошибкой, второй написан правильно:

Ошибка в первом XML документе заключается в том, что значение атрибута date элемента note не заключено в кавычки.

Сущности

Некоторые символы в XML имеют особые значения.

Если вы поместите, например, символ "<" внутри XML элемента, то будет сгенерирована ошибка, так как парсер интерпретирует его, как начало нового элемента.

Так, к ошибке приведет следующая строка XML документа:

Чтобы такая ошибка не возникала, нужно заменить символ "<" на его сущность:

В XML существует 5 предопределенных сущностей:

СущностьСимволЗначение
&lt;<меньше, чем
&gt;>больше, чем
&amp;&амперсанд
&apos;'апостроф
&quot;"кавычки

Замечание: Только символы "<" и "&" строго запрещены в XML. Символ ">" допустим, но лучше его всегда заменять на сущность.

Комментарии в XML

Синтаксис комментариев в XML такой же, как и в HTML.

Использование двух символов тире в середине комментария не допустимо.

Странно, но так можно:

В XML пробелы сохраняются

В HTML несколько последовательных пробельных символов усекаются до одного. В XML документе все пробельные символы сохраняются.

В XML новая строка сохраняется как LF

В приложениях Windows новая строка хранится в следующем виде: символ перевода каретки и символ новой строки (CR+LF).

Unix и Mac OSX используют LF.

Старые Mac системы используют CR.

XML сохраняет новую строку как LF.

Синтаксически верный XML документ

Если XML документ составлен в соответствии с приведенными синтаксическими правилами, то говорят, что это "синтаксически верный" XML документ.

Запись элементов в существующий файл XML
Я написал код, который должен записывать из Excel в таблицу значений, а потом добавлять записи в.

Добавить новый элемент и параметр в существующий XML файл
Добрый всем день! Как добавить в XML новую строку вида &lt;pattern name=&quot;value&quot; /&gt; &lt;?xml.

Как добавить новые элементы в существующий xml файл
Всем привет. Только начал изучаю xml и возник вопрос по добавлению новых элементов в существующий.


Как добавить инфу в существующий element в xml
Как добавить инфу в существующий element в xml

При ЧтенииXML указываю путь к файлу, а при ЗаписьXML с указанием пути к этому же файлу, выдает ошибку, что файл уже используется. А как тогда реализовать? Мне надо сначала прочитать файл, что бы определить все места, куда надо вставить строчку, потом добавить ее и перезаписать файл. я конечно не понимаю ничего в хмеле, но нельзя ли загрузить в структуру 1с хмельную, там добавить что надо куда надо, открыть тот файл на запись ( не на аппенд, а на врайт ), и записать
?

Мне нужен пример кода. Может еще как-то через XDTO? Как лучше это реализовать? В интернете что-то по этому поводу ничего нет. Только статьи на замену атрибутов.

Добавлено через 40 минут
Смотрю еще варианты с ПостроительDOM, но там если глубина Узла большая, он его не определяет.
Знающие люди, подскажите, при помощи какого метода проще реализовать требуемое? С примером кода, если можно.

Ни у кого нет мысли на этот счет? Знающие люди, подскажите, пожалуйста.

ПостроительDOM и ЧтениеXML - это объектный доступ к XML документу

Используй просто текст для подмены узлов или атрибутов

ПостроительDOM и ЧтениеXML - это объектный доступ к XML документу
Используй просто текст для подмены узлов или атрибутов

А можно пример кода, плз?
В ПостроительDOM если глубина Узла большая, он его не определяет. Или что-то не так делаю.
Мне надо в XML файле после определенного узла <___> вставить строчку.

Добавлено через 1 час 57 минут

Используй просто текст для подмены узлов или атрибутов в том то и дело мне не подменять надо, а в узел добавить строчку, что бы остальное содержимое в этом узле не стерлось. Ну так прочитать как Текст, как текстовый документ. Определить циклом номер строки, а затем просто вставлять в позицию+1 ваш текст. Ну так прочитать как Текст, как текстовый документ. Определить циклом номер строки, а затем просто вставлять в позицию+1 ваш текст. а с примером кода можно, пожалуйста? Не приходилось еще с XML работать, поэтому сложность, а в интернете мало примеров именно добавления строчки.

Вот между ПозНач-СтрДлина("<МойСуперТег>") и ПозКон находится слово "Значение"

Дальше думай сам что делать.


Добавление данных в существующий xml файл
Всем привет! Как открыть и прочитать xml разобрался. не получается добавить данные в.

Как добавить файл в существующий архив?
Добрый вечер интересует вопрос как можно добавить в существующий архив файлы? я пробовал вот так с.

WriteXml создает xml файл или только пишет в существующий?
Есть необходимость сохранить данные (DataSet) в xml файл. Знаю, что для этих целей существует метод.

Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы


За основу XML-данных мы возьмём слегка видоизмененный код из статьи о считывании XML-файла в программу. А именно будем создавать подобные записи:

Внешний вид

Выглядеть наша программа будет вот так:

У на нашей форме находятся следующие элементы: TextBox, NumericUpDown, ComboBox, а также кнопки и элемент DataGridView, разбитый на три столбца и занимающий большую часть формы.

В этом окне можно настроить имя, ширину и прочие свойства столбцов. Также стоит ознакомиться с некоторыми изменениями в свойствах данного элемента, которые мы внесли (в исходном файле, который можно скачать внизу статьи). Для удобства использования и избежания некоторых ошибок мы запретили в DataGridView добавлять строки, выбирать более одной строки, а также редактировать данные.

Добавление данных

Далее переходим к коду. Перво-наперво нам надо подключить библиотеку IO:

Данная библиотека отвечает за загрузку, запись и чтение файлов. Она нам понадобится, потом что мы в итоге будем сохранять наш файл на диск.

Для этого в коде кнопки пишем следующее:

private void button1_Click ( object sender , EventArgs e ) //Добавление данных в форму dataGridView1 . Rows [ n ] . Cells [ 0 ] . Value = textBox1 . Text ; // столбец Name dataGridView1 . Rows [ n ] . Cells [ 1 ] . Value = numericUpDown1 . Value ; // Age dataGridView1 . Rows [ n ] . Cells [ 2 ] . Value = comboBox1 . Text ; // Programmer

Сохранение XML-файла

Итак, мы можем добавить сколько угодно записей. Теперь надо их сохранить как один XML-файл.

private void button4_Click ( object sender , EventArgs e ) //сохранение данных из формы в XML DataSet ds = new DataSet ( ) ; // создаем пока что пустой кэш данных DataTable dt = new DataTable ( ) ; // создаем пока что пустую таблицу данных ds . Tables . Add ( dt ) ; //в ds создается таблица, с названием и колонками, созданными выше foreach ( DataGridViewRow r in dataGridView1 . Rows ) // пока в dataGridView1 есть строки DataRow row = ds . Tables [ "Employee" ] . NewRow ( ) ; // создаем новую строку в таблице, занесенной в ds row [ "Name" ] = r . Cells [ 0 ] . Value ; //в столбец этой строки заносим данные из первого столбца dataGridView1 row [ "Age" ] = r . Cells [ 1 ] . Value ; // то же самое со вторыми столбцами row [ "Programmer" ] = r . Cells [ 2 ] . Value ; //то же самое с третьими столбцами ds . Tables [ "Employee" ] . Rows . Add ( row ) ; //добавление всей этой строки в таблицу ds. MessageBox . Show ( "XML файл успешно сохранен." , "Выполнено." ) ; MessageBox . Show ( "Невозможно сохранить XML файл." , "Ошибка." ) ;

По сути мы просто создаем кэш данных под названием ds, затем в этот кэш заносим таблицу со столбцами Name, Age и Programmer.

Затем при помощи оператора цикла foreach, который работает с группами объектов (например, со столбцами и строками таблицы) создаем строку с тремя столбцами, в каждый из которых записываем данные из соответствующих столбцов dataGridView.

В XML-файл данные из ds переводятся автоматически при помощи метода WriteXml.

DataRow row = ds . Tables [ "Employee" ] . NewRow ( ) ; // создаем новую строку в таблице, занесенной в ds

Количество таких тегов будет равно количеству строк в DataGridView и, соответственно, количеству строк в ds.

row [ "Name" ] = r . Cells [ 0 ] . Value ; //в столбец этой строки заносим данные из первого столбца dataGridView1 row [ "Age" ] = r . Cells [ 1 ] . Value ; // то же самое со вторыми столбцами row [ "Programmer" ] = r . Cells [ 2 ] . Value ; //то же самое с третьими столбцами

Сохранение данного XML-файла будет произведено по пути, записанному в скобках следующей строки:

В данном случае файл сохраняется на диск G и имеет название Data.xml.

Важно: проверьте, имеет ли Visual Studio права для сохранения данных на выбранный вами диск. Если у него не будет для этого прав, то появится ошибка и файл не будет сохранен.

Мы научились добавлять и сохранять XML-файл при помощи класса DataSet и элемента DataGridView.

Загрузка XML-файла

private void button5_Click ( object sender , EventArgs e ) //загрузка файла XML в форму if ( dataGridView1 . Rows . Count > 0 ) //если в таблице больше нуля строк MessageBox . Show ( "Очистите поле перед загрузкой нового файла." , "Ошибка." ) ; if ( File . Exists ( "G:\\Data.xml" ) ) // если существует данный файл DataSet ds = new DataSet ( ) ; // создаем новый пустой кэш данных ds . ReadXml ( "G:\\Data.xml" ) ; // записываем в него XML-данные из файла foreach ( DataRow item in ds . Tables [ "Employee" ] . Rows ) int n = dataGridView1 . Rows . Add ( ) ; // добавляем новую сроку в dataGridView1 dataGridView1 . Rows [ n ] . Cells [ 0 ] . Value = item [ "Name" ] ; // заносим в первый столбец созданной строки данные из первого столбца таблицы ds. dataGridView1 . Rows [ n ] . Cells [ 1 ] . Value = item [ "Age" ] ; // то же самое со вторым столбцом dataGridView1 . Rows [ n ] . Cells [ 2 ] . Value = item [ "Programmer" ] ; // то же самое с третьим столбцом

Таким образом происходит загрузка XML-файла.

Редактирование данных

Теперь сделаем возможность редактирования данных для XML-файла.

Итак, для начала мы переходим в события элемента DataGridView (значок молнии), ищем там MouseClick и щёлкаем на поле рядом с ним два раза:

В этом разделе показано, как использовать классы пакета 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 Текст Контейнер для структур уровня блока (абзацев, таблиц, заметок и других элементов, указанных в спецификации ISO/IEC 29500).
p Paragraph Абзац.
r Run Прогон.
t Text Диапазон текста.

Механизм работы примера кода

После открытия документа для редактирования в инструкции using как объекта WordprocessingDocument код создает ссылку на часть MainDocumentPart и добавляет новую настраиваемую часть XML. Затем код читает содержимое внешнего файла с пользовательским XML и записывает его в часть CustomXmlPart.

Чтобы использовать новую часть документа добавьте ссылку на часть документа в части связи.

Пример кода

Следующий код добавляет новую часть документа, которая содержит настраиваемый XML из внешнего файла, а затем заполняет соответствующую часть документа. Чтобы вызвать метод AddCustomXmlPart в программе, можно использовать следующий пример, который изменяет файл «myPkg2.docx» путем добавления к нему новой части документа.

Прежде чем запустить программу, измените расширение файла Word с .docx на .zip и просмотрите содержимое ZIP-файла. Затем измените расширение .docx и запустите программу. После выполнения программы снова измените расширение файла на .zip и просмотрите его содержимое. Вы увидите дополнительную папку с именем "customXML." В этой папке находится файл XML, который представляет собой добавленную часть

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