ik bouw Toolz.devidd, en een terugkerende klus over het WordPress en Laravel werk wat ik doe is data invoeren in systemen die een decennium of twee geleden ontworpen zijn, zat spreken nog XML en alleen XML: een productfeed voor een marktplaats, een importformaat voor een boekhoudpakket, een SOAP eindpunt dat nergens anders naar kijkt De data komen bijna altijd binnen als CSV export vanuit een spreadsheet, dus de taak is om platte komma gescheiden rijen om te zetten in een gestructureerd XML document Ik heb gezien dat op alle mogelijke manieren fout gaat, van een klantnaam met daarin een komma die in twee kolommen gesplitst is, tot een ampersand in een bedrijfsnaam waardoor het hele bestand niet kon ontleden De CSV naar XML converter bestaat om die conversie correct uit te voeren, in de browser, zonder een klantenlijst in een anonieme server te plakken. Deze handleiding behandelt wat de conversie inhoudt, waarom de lastige onderdelen lastig zijn en hoe u de uitvoer kunt vormgeven voor wat u ook gaat lezen.
tl;dr: Een CSV naar XML-converter leest door komma's gescheiden rijen en schrijft ze als een goed gevormd XML-document, waarbij elke rij een element wordt en elke cel een genoemd onderliggende element of een attribuut wordt. Het parseert CSV per RFC 4180, dus geciteerde velden met komma's, aanhalingstekens of regeleindes blijven intact; het detecteert automatisch of de scheidingsteken een komma, puntkomma, tabblad of pijp is; het coert kolomnamen in geldige XML-tags; en het ontsnapt aan de markup-significante tekens, zodat de uitvoer altijd parseert. Het draait volledig in uw browser, zodat de gegevens in uw CSV nooit worden geüpload.
Wat is het verschil tussen CSV en XML?
CSV, komma-gescheiden waarden, is een platte tekst formaat Elke regel is een record, en binnen een regel elk veld wordt gescheiden door een scheidingsteken, meestal een komma Het is compact, elke spreadsheet kan het exporteren, en het is triviaal voor een mens om te lezen Wat het niet kan is uitdrukken structuur of betekenis Er is niets in een CSV dat zegt wat een kolom betekent, geen nesting, geen soorten; een cel holding true en een cel die het woord houdt true zijn niet van elkaar te onderscheiden, en een waarde die zelf een komma bevat, moet speciaal worden geciteerd om te voorkomen dat deze als twee velden wordt gelezen.
XML, de Extensible Markup Language, is de omgekeerde handel Elke waarde is verpakt in een benoemde tag, dus <name>Ada Lovelace</name> draagt zowel de waarde als het label ervoor Die breedsprakigheid koopt structuur: elementen nestelen, documenten kunnen gevalideerd worden aan de hand van een schema, en een stylesheet kan het geheel transformeren De regels voor wat telt als goed opgemaakte XML zijn uiteengezet in de W3C XML 1.0 specificatie, en ze zijn streng op manieren die CSV nooit is, en dat is precies de reden waarom een mechanische conversie voorzichtig moet zijn. Het omzetten van CSV naar XML gaat fundamenteel over het toevoegen van de structuur en het ontsnappen die CSV impliciet achterlaat.
Hoe wordt een rij een element?
De natuurlijke mapping behandelt de eerste CSV-rij als de header, waarbij de kolomnamen worden vastgehouden, en elke volgende rij als één record Elke record wordt een rij-element, en daarbinnen wordt elke cel een kindelement dat naar zijn kolom wordt genoemd Dus een CSV van id,name,role met een gegevensrij 1,Ada Lovelace,Engineer wordt:
<rows>
<row>
<id>1</id>
<name>Ada Lovelace</name>
<role>Engineer</role>
</row>
</rows>
De buitenste rows element is de document root, omdat een goed gevormd XML document moet hebben precies één top-level element wrapping al het andere Met de converter kunt u zowel de root en het per-rij element hernoemen, zodat u kunt produceren <catalog><product>...</product></catalog> in plaats daarvan wanneer dat is wat uw doelwit verwacht De kolomnamen worden de tagnamen, dat is waar de eerste echte beperking bijt, omdat niet elke kolomkop een legale XML-tag is.
Waarom worden sommige kolomnamen gewijzigd?
XML-elementnamen zijn geen vrije vorm De specificatie zegt dat een naam moet beginnen met een letter of onderstrepingsteken en dan letters, cijfers, koppeltekens, punten en onderstrepingstekens kan bevatten, maar geen spaties en niet de meeste interpunctie, en dat het mogelijk is dat deze niet begint met een cijfer. Een spreadsheetkolom genaamd First Name of Unit Price ($) of 2024 Total is een prima kop en een illegale XML tag Als er een converter is uitgezonden <First Name> het document zou helemaal niet ontleden.
Dus de tool schoont elke kolomnaam op tot een geldige tag Spaties en illegale tekens worden onderstrepingstekens, dus First Name HALD First_Name, en een naam die begint met een cijfer krijgt een onderstrepingstekenvoorvoegsel, dus 2024 Total HALD _2024_Total. Als twee kolommen opschonen naar dezelfde tag, of de header echt een naam herhaalt, krijgen de duplicaten een numeriek achtervoegsel zodat geen enkele kolom stilletjes een andere overschrijft, en de tool waarschuwt u wanneer het dit heeft gedaan De belangrijke garantie is dat alleen de tagnamen worden aangepast; de gegevens in elke cel worden onaangeroerd doorgegeven Als u de originele labels precies bewaard wilt hebben, past de attribuutmodus, hieronder behandeld, vaak beter omdat attribuutnamen dezelfde regels hebben, maar u er ook voor kunt kiezen om de kop als waarde elders te dragen.
Hoe zit het met komma's en aanhalingstekens binnen een waarde?
Dit is het deel dat naïeve converters doorbreekt, en het is de moeite waard om te begrijpen. CSV heeft een citaatconventie, geformaliseerd in RFC 4180, voor waarden die de scheidingsteken of een regeleinde bevatten Zo'n waarde is verpakt in dubbele aanhalingstekens, en elke letterlijke dubbele aanhalingstekens erin wordt geschreven als twee dubbele aanhalingstekens Dus een bedrijfsveldholding Hopper, Grace wordt opgeslagen in de CSV als "Hopper, Grace", en een notitie lezen she said "hi" wordt opgeslagen als "she said ""hi""".
Een converter die elke lijn op komma's splitst, zal deze beide verminken, waarbij één veld in tweeën wordt veranderd en overal verdwaalde aanhalingstekens achterblijven. Deze tool maakt gebruik van een echte statusmachine-parser die bijhoudt of deze zich binnen een geciteerd veld bevindt, dus een ingebedde komma, een ingebed citaat en zelfs een nieuwe regel binnen een geciteerde waarde worden allemaal gelezen als onderdeel van het enkele veld waartoe ze behoren. Dat is het verschil tussen een klant met de naam Smith, John aankomen als een <name> element en aankomen als een gebroken record met een extra kolom Als uw export uit Excel, Google Spreadsheets of een database-dump kwam, gebruikt het vrijwel zeker deze offerte, en het correct parseren is niet optioneel.
Zodra de waarde veilig is geparseerd, moet deze nog steeds veilig worden gemaakt voor XML, wat een afzonderlijk ontsnappingsprobleem is. Vijf tekens zijn speciaal in XML, en de drie die er toe doen in elementtekst zijn het ampersand, het minder-dan-teken en het groter-dan-teken. Een cel met daarin Ben & Jerry's of x < y zou ongeldige XML produceren als deze letterlijk wordt geschreven, dus de converter vervangt ze door de vooraf gedefinieerde entiteiten &, <, en >. In attribuutwaarden wordt ook de dubbele aanhalingstekens ontsnapt. Deze ontsnapping garandeert de uitvoerparsen, ongeacht wat de gegevens bevatten.
Moet elke cel een element of een attribuut zijn?
XML geeft je twee plaatsen om een waarde te zetten: als de tekst van een onderliggend element, of als attribuut op het rijelement De converter ondersteunt beide, en welke gelijk heeft hangt volledig af van het systeem dat het bestand zal lezen Elementmodus levert de leesbare, nestbare vorm op:
<row>
<name>Ada</name>
</row>
Attribuutmodus stort de hele rij in één zelfsluitend element:
<row name="Ada" role="Engineer"/>
Hier is hoe de twee zich verhouden tot de dimensies die er gewoonlijk over beslissen:
| overweging | Kindelementen | kenmerken |
|---|---|---|
| leesbaarheid | Hoger, één waarde per regel | Dichter, één rij per lijn |
| Bestandsgrootte | Groter, tags herhaald | Kleinere |
| Kan later verder nestelen | ja | heel weinig |
| Herhaalde waarden per kolom | Toegestaan | Eén waarde per attribuutnaam |
| Typische pasvorm | Gegevens in documentstijl, feeds | Compacte records, config |
Als vuistregel geldt dat als de gegevens recordachtig en plat zijn en de lezer ze klein wil, attributen prima zijn; als de gegevens later structuur kunnen krijgen, of als een mens ze zal lezen, zijn elementen de veiligere standaard. Als je niet zeker weet wat het consumerende systeem wil, zijn elementen de conservatievere keuze, omdat alles wat attributen accepteert ook aan elementen kan worden aangepast, maar het omgekeerde is niet altijd waar.
Hoe de CSV naar XML converter te gebruiken
Stap 1: Plak uw CSV
Plak of typ uw CSV in het invoervak Een blok dat rechtstreeks uit Excel of Google Spreadsheets is gekopieerd, werkt, evenals de inhoud van een .csv bestand, inclusief geciteerde velden die komma's of regeleinden bevatten.
Stap 2: Stel de opties in
Laat de scheidingsteken op automatisch detecteren staan of kies er expliciet een, bevestig of de eerste rij een header is, stel de naam van het root- en rijelement in en kies of elke cel een onderliggend element of een attribuut wordt. U kunt ook de XML-declaratie omschakelen en schakelen tussen ingesprongen en verkleinde uitvoer.
Stap 3: Converteren
Klik op Converteren naar XML. De tool parseert elke rij, schoont de kolomnamen in geldige tags, ontsnapt aan de opmaaktekens en stelt een goed gevormd document samen, waarin u wordt gewaarschuwd voor hernoemde kolommen of rafelige rijen.
Stap 4: Kopiëren of downloaden
Kopieer de XML naar uw klembord of download deze als a .xml bestand. als de vorm niet helemaal goed is voor het doelsysteem, pas dan de elementnamen aan of schakel tussen element- en attribuutmodus en converteer opnieuw.
Waarom automatisch de scheidingsteken detecteren?
Niet elke "CSV" wordt gescheiden door komma's. Exports van Europese locaties gebruiken vaak een puntkomma, omdat de komma het decimale scheidingsteken is in die regio's, en gegevens uit een database of een log vaak van tabbladen worden gescheiden. Een converter die aan komma's is vergrendeld, leest een puntkommabestand als een enkele brede kolom en produceert onzin. Deze tool detecteert de scheidingsteken door komma, puntkomma, tabblad en pijp te proberen en te kiezen, afhankelijk van wat een consistent kolomaantal oplevert over de eerste paar rijen, wat een veel betrouwbaarder signaal is dan de ruwe frequentie, omdat een komma in het proza vaak maar onregelmatig verschijnt. Je kunt altijd de detectie overschrijven als een bestand ongebruikelijk is, maar je gaat, maar het plakken betekent
Ragged rijen, waarbij een lijn meer of minder velden heeft dan de header, zijn de andere real-world mess De converter pads korte rijen met lege elementen en waarschuwt u in plaats van stil te laten vallen gegevens, zodat u kunt zien dat rij 47 miste zijn laatste twee velden in plaats van het stroomafwaarts ontdekken Extra velden voorbij de header krijgen generieke kolomnamen zodat niets verloren gaat, en de waarschuwing vertelt u precies hoeveel rijen werden beïnvloed, wat meestal genoeg is om het probleem terug te traceren naar een verdwaalde scheidingsteken in de bron Als u wilt inspecteren een rommelig bestand voordat u het converteert, de CSV-viewer geeft het weer als een tabel met dezelfde tolerante parser, wat vaak de snelste manier is om een verdwaalde scheidingsteken of een niet-gesloten aanhalingsteken te zien voordat het een verkeerd opgemaakte uitvoer wordt.
Waar de CSV naar XML converter past bij al het andere
Dataconversie is zelden een enkele hop Dezelfde CSV die vandaag XML moet worden, moet misschien morgen JSON worden voor een REST API, of een partij SQL-inserts voor een databaseload De CSV naar JSON converter verwerkt het JSON-doel met dezelfde RFC 4180-parser, en de CSV naar SQL converter zet dezelfde rijen om in invoeginstructies Wanneer de gegevens al XML zijn en u de andere kant op moet, zal de XML naar JSON-converter en de JSON naar XML converter bedek beide richtingen van de XML-JSON-grens en ze gebruiken dezelfde attribuut-en-tekstconventies die deze tool volgt, zodat de retour voorspelbaar is.
Voor het bredere plaatje is de CSV naar JSON-gids graaft dieper in het ontleden van dezelfde rommelige exportproducten, de JSON naar XML-gids legt de element-en-attribuut-toewijzing uit vanaf de JSON-kant, en de Gegevensprivacy in online tools artikel legt uit waarom dit alles in de browser doen ertoe doet wanneer de CSV namen en e-mailadressen bevat Zoals alles op Toolz.dev draait de converter volledig in uw browser, zodat de gegevens die u converteert nooit uw machine verlaten.
Veelgestelde vragen
Hoe converteer ik een CSV-bestand naar XML?
Plak de CSV in het invoervak, bevestig de instellingen van de scheidingsteken en de koptekst en klik op Converteren naar XML De eerste rij wordt gelezen als de kolomnamen, en elke volgende rij wordt een XML-element waarvan de onderliggende tags naar die kolommen zijn vernoemd U kunt het resultaat vervolgens kopiëren of downloaden als een .xml-bestand.
Wat gebeurt er met de CSV-headerrij?
Wanneer " eerste rij is header" is aan, worden de headercellen de XML-elementnamen voor elke gegevensrij Namen worden opgeschoond tot geldige XML-tags, dus "First Name" wordt First_Name en een dubbele kolom wordt hernoemd met een numeriek achtervoegsel Als u de headeroptie uitschakelt, worden kolommen kolom_1, kolom_2 genoemd, enzovoort.
Moet elke cel een element of een attribuut zijn?
Het hangt af van het systeem dat de XML leest Elementmodus schrijft een leesbare nestbare structuur met één tag per waarde, terwijl attribuutmodus een rij samenvouwt tot één compact element met één attribuut per kolom Deze converter ondersteunt beide, dus kies degene die uw schema of importdoel verwacht; elementen zijn de veiligere standaard wanneer u niet zeker bent.
Verwerkt de converter komma's binnen een waarde?
Ja. Na RFC 4180 wordt een waarde die een komma, een dubbele aanhalingstekens of een regeleinde bevat, in de CSV in dubbele aanhalingstekens verpakt en wordt een ingebed aanhalingsteken als twee aanhalingstekens geschreven. De parser leest die aangehaalde velden als een enkele waarde in plaats van ze te splitsen, dus "Hopper, Grace" blijft in één element.
Welke afbakeningen worden ondersteund?
Komma, puntkomma, tabblad en pijp Standaard detecteert het gereedschap automatisch de scheidingsteken door degene te kiezen die een consistent aantal kolommen produceert over de eerste verschillende rijen, die correct omgaat met Europese puntkommabestanden en tab-gescheiden exports. U kunt de scheidingsteken ook handmatig selecteren.
Waarom worden sommige van mijn kolomnamen gewijzigd in de XML?
XML-elementnamen kunnen geen spaties of de meeste interpunctie bevatten en kunnen niet beginnen met een cijfer of koppelteken De converter vervangt illegale tekens door onderstrepingstekens en geeft een naam voor die begint met een cijfer, zodat de uitvoer altijd goed gevormd is De originele gegevens in elke cel worden nooit gewijzigd, alleen de tagnamen.
Worden mijn CSV-gegevens geüpload naar een server?
Nee. De volledige conversie wordt uitgevoerd in uw browser met JavaScript Niets dat u plakt wordt verzonden, gelogd of opgeslagen, en de tool blijft werken zonder netwerkverbinding zodra de pagina is geladen, waardoor namen, e-mails en andere gegevens in uw CSV privé blijven.
Kan ik XML terug converteren naar CSV of naar JSON?
Deze tool converteert CSV naar XML Om de gegevens de andere kant op te hervormen, gebruikt u de XML naar JSON converter, en gebruikt u de CSV naar JSON converter wanneer JSON in plaats van XML uw doel is Ze draaien allemaal client-side met dezelfde privacy garanties.



