я строю Toolz.dev, и повторяющаяся работа в работе WordPress и Laravel, которую я выполняю, - это подача данных в системы, которые были разработаны десять или два года назад. Многие из них по-прежнему говорят на XML и только на XML: лента продукта для торговой площадки, формат импорта для пакета бухгалтерского учета, конечная точка SOAP, которая не будет смотреть на что-либо еще. данные почти всегда поступают как CSV экспорт из электронной таблицы, поэтому задача состоит в том, чтобы превратить плоские строки, разделенные запятыми, в структурированный XML документ. Я наблюдал, как это идет не так во всех возможных отношениях, от имени клиента, содержащего запятую, которая разделена на два столбца, до амперсанда в имени компании, из-за которого весь файл не может быть проанализирован.The Преобразователь CSV в XML существует, чтобы сделать это преобразование правильно, в браузере, без вставки списка клиентов в какой-то анонимный сервер. Это руководство охватывает, что включает в себя преобразование, почему сложные части сложны и как сформировать вывод для того, что собирается его прочитать.
TL;DR: Конвертер CSV в XML считывает разделенные запятыми строки и записывает их как хорошо сформированный XML-документ, при этом каждая строка становится элементом, а каждая ячейка становится либо именованным дочерним элементом, либо атрибутом. Он анализирует CSV на RFC 4180, поэтому поля с кавычками, содержащие запятые, кавычки или разрывы строк, сохраняются в целости и сохранности; он автоматически определяет, является ли разделитель запятой, точкой с запятой, вкладкой или каналом; он принудительно преобразует имена столбцов в действительные теги XML; и он ускользает от символов, значимых для разметки, поэтому выходные данные всегда анализируются. Он полностью выполняется в вашем браузере, поэтому данные в вашем CSV никогда не загружаются.
В чем разница между CSV и XML?
CSV, значения, разделенные запятыми, представляют собой плоский текстовый формат. Каждая строка является записью, и внутри строки каждое поле разделено разделителем, обычно запятой. Он компактен, каждая электронная таблица может экспортировать его, и человеку тривиально читать. Чего он не может сделать, так это выразить структуру или значение. В CSV нет ничего, что говорило бы, что означает столбец, нет вложенности, нет типов; удержание ячейки true и клетка, держащая слово true неразличимы, и значение, которое само по себе содержит запятую, требует специального цитирования, чтобы его не читали как два поля.
XML, расширяемый язык разметки, - это противоположная сделка. Каждое значение упаковано в именованный тег, так что <name>Ada Lovelace</name> несет для него и значение, и метку. что многословие покупает структуру: элементы гнезда, документы могут быть проверены на соответствие схеме, и таблица стилей может преобразовать все это. правила для того, что считается как хорошо сформированный XML изложены в Спецификация W3C XML 1.0, и они строги в том, что CSV никогда не является, и именно поэтому механическое преобразование должно быть осторожным. Преобразование CSV в XML в основном заключается в добавлении структуры и выходе, который CSV оставляет неявным.
Как строка становится элементом?
Естественное отображение рассматривает первую строку CSV как заголовок, удерживая имена столбцов, а каждую следующую строку как одну запись. Каждая запись становится элементом строки, а внутри нее каждая ячейка становится дочерним элементом, названным в честь ее столбца. Итак, CSV из id,name,role с строкой данных 1,Ada Lovelace,Engineer становится:
<rows>
<row>
<id>1</id>
<name>Ada Lovelace</name>
<role>Engineer</role>
</row>
</rows>
Внешний rows элемент - это корень документа, потому что хорошо сформированный XML-документ должен иметь ровно один элемент верхнего уровня, обертывающий все остальное. конвертер позволяет переименовать и корень, и элемент для каждой строки, чтобы вы могли производить <catalog><product>...</product></catalog> вместо этого, когда это то, что ожидает ваша цель. имена столбцов становятся именами тегов, и именно здесь кусается первое реальное ограничение, потому что не каждый заголовок столбца является законным тегом XML.
Почему некоторые названия столбцов меняются?
Имена элементов XML не являются свободными формами. в спецификации говорится, что имя должно начинаться с буквы или подчеркивания, а затем может содержать буквы, цифры, дефисы, точки и подчеркивания, но не пробелы и не большинство знаков препинания, и оно может начинаться не с цифры. Столбец электронной таблицы называется First Name или Unit Price ($) или 2024 Total является совершенно хорошим заголовком и нелегальным тегом XML. Если преобразователь излучал <First Name> документ вообще не анализировал бы.
Таким образом, инструмент очищает каждое имя столбца в допустимый тег. Пробелы и незаконные символы становятся подчеркиваниями, так что First Name становиться First_Name, и имя, которое начинается с цифры, получает префикс подчеркивания 2024 Total становиться _2024_Total. Если два столбца очищаются до одного и того же тега или заголовок действительно повторяет имя, дубликаты получают числовой суффикс, поэтому ни один столбец не перезаписывает другой, и инструмент предупреждает вас, когда он это сделал. Важная гарантия заключается в том, что только имена тегов корректируются; данные внутри каждой ячейки передаются нетронутыми. Если вам нужны оригинальные метки, сохраненные точно, режим атрибутов, описанный ниже, часто лучше подходит, потому что имена атрибутов соответствуют одним и тем же правилам, но вы также можете выбрать перенос заголовка в качестве значения в другом месте.
А как насчет запятых и кавычек внутри значения?
Это та часть, которая ломает наивных конвертеров, и это стоит понять. CSV имеет соглашение о цитировании, формализованное в RFC 4180, для значений, которые содержат разделитель или разрыв строки. такое значение обернуто двойными кавычками, и любая буквальная двойная кавычка внутри него записана как две двойные кавычки. так что холдинг поля компании Hopper, Grace хранится в CSV как "Hopper, Grace", и чтение заметки she said "hi" хранится как "she said ""hi""", йо-
Преобразователь, который разделяет каждую строку на запятых, будет искажать оба из них, превращая одно поле в два и оставляя случайные кавычки везде. Этот инструмент использует правильный синтаксический анализатор конечного автомата, который отслеживает, находится ли он внутри поля кавычек, поэтому встроенная запятая, встроенная кавычка и даже новая строка внутри значения кавычек читаются как часть единого поля, к которому они принадлежат. В этом разница между именем клиента Smith, John прибытие как одно <name> элемент и прибытие как сломанная запись с дополнительным столбцом. если ваш экспорт вышел из Excel, Google Sheets или дампа базы данных, он почти наверняка использует это цитирование, и его правильный анализ не является необязательным.
После безопасного анализа значения его все равно необходимо сделать безопасным для XML, что является отдельной проблемой выхода. Пять символов являются особенными в XML, и три, которые имеют значение в тексте элемента, - это амперсанд, знак меньше и знак больше. Ячейка, содержащая Ben & Jerry's или x < y если писать буквально, это приведет к недопустимому XML, поэтому конвертер заменяет их предопределенными объектами &, <, и >. В значениях атрибутов также экранируется двойная кавычка. Этот выход гарантирует анализ вывода независимо от того, что содержат данные.
Должна ли каждая ячейка быть элементом или атрибутом?
XML дает вам два места для установки значения: как текст дочернего элемента или как атрибут на элементе строки. Преобразователь поддерживает оба, и какой из них прав, полностью зависит от системы, которая будет читать файл. Режим элемента создает читаемую вложенную форму:
<row>
<name>Ada</name>
</row>
Режим атрибута сворачивает всю строку в единый самозакрывающийся элемент:
<row name="Ada" role="Engineer"/>
Вот как они сравнивают размеры, которые обычно решают это:
| любовное | Детские элементы | атрибуты |
|---|---|---|
| читабельность | Выше, одно значение в строке | Более плотный, один ряд на линию |
| Размер файла | Больше, теги повторяются | Меньше |
| Может гнездиться дальше позже | да | нет |
| Повторяющиеся значения на столбец | Допускается | Одно значение для имени атрибута |
| Типичная посадка | Данные в стиле документа, каналы | Компактные записи, конфигурация |
Как правило, если данные похожи на записи и плоские, а читатель хочет их небольшие, атрибуты хороши; если данные могут вырастить структуру позже или человек прочитает их, элементы являются более безопасными по умолчанию. Когда вы не уверены, чего хочет потребляющая система, элементы являются более консервативным выбором, потому что все, что принимает атрибуты, также может быть адаптировано к элементам, но обратное не всегда верно.
Как использовать конвертер CSV в XML
Шаг 1: Вставьте CSV
Вставьте или введите свой CSV в поле ввода. работает блок, скопированный прямо из Excel или Google Sheets, а также содержимое a .csv файл, включая поля с кавычками, содержащие запятые или разрывы строк.
Шаг 2: Установите параметры
Оставьте разделитель на автообнаружение или выберите один явно, подтвердите, является ли первая строка заголовком, установите имена элементов root и row и выберите, становится ли каждая ячейка дочерним элементом или атрибутом. вы также можете переключить объявление XML и переключаться между отступом и минифицированным выводом.
Шаг 3: конвертировать
Нажмите "Преобразовать в XML". Инструмент анализирует каждую строку, очищает имена столбцов в допустимые теги, ускользает от символов разметки и собирает хорошо сформированный документ, предупреждая вас о любых переименованных столбцах или рваных строках.
Шаг 4: Скопируйте или загрузите
Скопируйте XML в буфер обмена или загрузите его как .xml файл. если форма не совсем подходит для целевой системы, отрегулируйте имена элементов или переключитесь между режимом элементов и атрибутов и снова преобразуйте.
Зачем автоматически определять разделитель?
Не каждый & quot;CSV & quot; разделяется запятыми.Exports from European locales часто использует точку с запятой, потому что запятая является десятичным разделителем в этих областях, а данные, извлеченные из базы данных или журнала, часто разделяются по вкладкам. конвертер, заблокированный в запятые, будет читать файл с запятой как один широкий столбец и производить ерунду.Этот инструмент обнаруживает разделитель, пробуя запятую, точку с запятой, вкладку и трубку и выбирая тот, который производит согласованное количество столбцов по первым нескольким строкам, что является гораздо более надежным сигналом, чем частота сырья, потому что запятая внутри прозы появляется часто, но нерегулярно.Вы всегда можете переопределить предположение, когда файл необычен, но в обычных случаях обнаружение означает, что вы вставляете и уходите.
Рваные строки, где строка имеет больше или меньше полей, чем заголовок, являются другим реальным беспорядком. конвертер заполняет короткие строки с пустыми элементами и предупреждает вас, а не молча отбрасывать данные, поэтому вы можете видеть, что строка 47 не имела своих последних двух полей вместо обнаружения его вниз по потоку. Дополнительные поля за заголовком получают общие имена столбцов, поэтому ничего не теряется, и предупреждение сообщает вам, сколько именно строк было затронуто, что обычно достаточно, чтобы проследить проблему обратно к случайному разделителю в источнике. Если вы хотите проверить беспорядочный файл перед его преобразованием, предупреждение Просмотрщик CSV отображает его как таблицу с тем же терпимым анализатором, что часто является самым быстрым способом обнаружить случайный разделитель или незакрытую кавычку до того, как она станет искаженной выходной.
Где конвертер CSV в XML сочетается со всем остальным
Преобразование данных редко бывает однократным. тот же CSV, который должен стать XML сегодня, возможно, должен стать JSON завтра для REST API, или пакет вставок SQL для загрузки базы данных.The Преобразователь CSV в JSON обрабатывает цель JSON с помощью того же анализатора RFC 4180 и Преобразователь CSV в SQL превращает те же строки в операторы вставки Когда данные уже XML и вам нужно пойти другим путем, XML в JSON конвертер и тот Конвертер JSON в XML охватите оба направления границы XML-JSON, и они будут использовать те же соглашения об атрибутах и текстах, которым следует этот инструмент, поэтому путешествие туда и обратно предсказуемо.
Для более широкой картины CSV в руководство JSON углубляется в анализ того же беспорядочного экспорта Руководство JSON по XML объясняет отображение элементов и атрибутов со стороны JSON и Конфиденциальность данных в онлайн-инстру статья объясняет, почему делать все это в браузере имеет значение, когда CSV содержит имена и адреса электронной почты. как и все на Toolz.dev, конвертер полностью работает в вашем браузере, поэтому данные, которые вы конвертируете, никогда не покидают вашу машину.
Часто задаваемые вопросы
Как конвертировать файл CSV в XML?
Вставьте CSV в поле ввода, подтвердите настройки разделителя и заголовка и нажмите Конвертировать в XML. Первая строка читается как имена столбцов, и каждая следующая строка становится XML-элементом, дочерние теги которого названы в честь этих столбцов. Затем вы можете скопировать результат или загрузить его в виде файла .xml.
Что происходит с строкой заголовка CSV?
Когда & quot;первая строка - header& quot; включена, ячейки заголовка становятся именами элементов XML для каждой строки данных Имена очищаются в допустимые теги XML, поэтому & quot;First Name& quot; становится First_Name и дубликат столбца переименовывается с числовым суффиксом Если вы выключить опцию заголовка, столбцы называются column_1, column_2 и так далее.
Должна ли каждая ячейка быть элементом или атрибутом?
Это зависит от системы, считывающей XML. Режим элемента записывает читаемую вложенную структуру с одним тегом на значение, в то время как режим атрибута сворачивает строку в один компактный элемент с одним атрибутом на столбец. Этот преобразователь поддерживает оба, поэтому выберите ту, которую ожидает ваша схема или цель импорта; элементы являются более безопасными по умолчанию, когда вы не уверены.
Обрабатывает ли преобразователь запятые внутри значения?
Да. следуя RFC 4180, значение, которое содержит запятую, двойную кавычку или разрыв строки, обернуто двойными кавычками в CSV, а встроенная кавычка записывается в виде двух кавычек. синтаксический анализатор читает эти цитируемые поля как единое значение, а не разбивает их, поэтому & quot;Hopper, Grace& quot; остается в одном элементе.
Какие разделители поддерживаются?
Запятая, точка с запятой, вкладка и трубка. по умолчанию инструмент автоматически определяет разделитель, выбирая тот, который создает согласованное количество столбцов в первых нескольких строках, который правильно обрабатывает европейские файлы с запятой и экспорт, разделенный вкладками. Вы также можете выбрать разделитель вручную.
Почему некоторые из моих названий столбцов изменены в XML?
Имена элементов XML не могут содержать пробелы или большинство знаков препинания и не могут начинаться с цифры или дефиса Конвертер заменяет нелегальные символы подчеркиваниями и префиксами имя, которое начинается с цифры, поэтому вывод всегда хорошо сформирован Исходные данные в каждой ячейке никогда не изменяются, только имена тегов.
Мои данные CSV загружены на сервер?
Нет. Все преобразование выполняется в вашем браузере с помощью JavaScript. Ничто из того, что вы вставляете, не передается, не регистрируется и не сохраняется, и инструмент продолжает работать без сетевого соединения после загрузки страницы, что сохраняет имена, электронные письма и другие данные в вашем CSV конфиденциальными.
Могу ли я конвертировать XML обратно в CSV или в JSON?
Этот инструмент преобразует CSV в XML. Чтобы изменить форму данных другим способом, используйте конвертер XML в JSON и используйте конвертер CSV в JSON, когда вашей целью является JSON, а не XML. Все они работают на стороне клиента с одинаковыми гарантиями конфиденциальности.



