De code van deze pagina is niet gestart.

Open je index.html rechtstreeks uit een map, dan worden JavaScript-modules geblokkeerd en gebeurt er niets zodra je een bestand kiest. Serveer de map in plaats daarvan over http:

powershell -ExecutionPolicy Bypass -File serve.ps1

Open daarna http://localhost:8080/.

XML-formatter — uitleggen, plat persen of omzetten naar JSON

XML uitgelegd om te lezen of plat geperst om te versturen, en beide kanten op omgezet naar JSON. Niets ervan wordt in de server van iemand anders geplakt.

Taal: Nederlands
Broncode bekijken
Je XML- en JSON-bestanden worden nooit geüpload. Er is geen server.

Formatteren en omzetten zijn rekenen aan een tekenreeks, hier, in deze pagina. De parser is met de hand geschreven en staat in src/shared/parse-xml.js, en meer is er niet. Dit gereedschap heeft überhaupt geen netwerkfunctie — niets op te halen, niets te versturen — en dat weegt hier zwaarder dan het woord ‚XML‘ doet vermoeden, want wat in dit formaat binnenkomt is meestal een factuur, een bankafschrift, een medisch dossier of een SOAP-bericht met iemands inloggegevens in de kop.

Live controle: bezig met controleren…

Offline: bezig met controleren…

Je hoeft ons niet op ons woord te geloven: open de DevTools, kijk naar het netwerktabblad en formatteer iets. Geen enkele aanvraag draagt een teken van wat je hebt geplakt. Of trek de stekker uit het internet en formatteer het toch.

1 Kies de klus

Opmaak Plat samengeperst is hetzelfde document zonder elke spatie die er alleen stond om het te kunnen lezen.

Naam voor het buitenste element XML heeft bovenaan één element en JSON niet, dus er moet er eentje verzonnen worden.

2 Plak hem erin

leeg

3 Neem het resultaat mee

Nog niets.

 

Als Markdown bekijken

Zo formatteer je XML zonder het te uploaden

  1. Kies de klus. Twee tabbladen, één vak: Formatteren legt XML uit of perst het plat; Omzetten maakt er JSON van, of van JSON weer XML. De XML die je net hebt uitgelegd is de XML die je omzet, zonder hem twee keer te plakken.
  2. Plak het, of zet het bestand neer. Alles wat je kunt selecteren en kopiëren werkt, en een .xml-, .svg-, .rss- of .xsd-bestand dat je op de kiezer zet wordt door je eigen browser gelezen en in het vak gezet — er is geen uploadstap om over te slaan.
  3. Kies de inspringing, of pers het plat. Twee spaties, vier, of een tab. Plat persen is hetzelfde document zonder elke spatie die er alleen stond om het te kunnen lezen, en het resultaat zegt hoeveel bytes dat scheelde.
  4. Lees de fout waar de fout zit. Een parser die hier vastloopt zegt welke tag nooit gesloten is en op welke regel en kolom, in plaats van ‚fout op regel 1‘, wat een browser zegt over een document dat hij in één keer las.
  5. Neem het resultaat mee. Kopieer het, of download het als bestand, genoemd naar het formaat waarin het eruit kwam.

Vragen

Wordt mijn XML ergens geüpload?

Nee. De parser en de printer op deze pagina zijn functies die in je eigen browser draaien, op je eigen hardware. Dit gereedschap heeft überhaupt geen netwerkfunctie — het haalt nooit iets op en stuurt nooit iets weg — en in het Content-Security-Policy van de pagina staat elk adres dat ze mag benaderen, en geen daarvan is van ons. Dat weegt bij XML zwaarder dan de reputatie van het formaat doet vermoeden: wat erin binnenkomt is meestal een factuur, een bankafschrift, een medisch dossier, of een SOAP-verzoek met inloggegevens in de kop.

Lost het externe entiteiten op?

Nee, en er valt niets uit te zetten. Het oplossen van externe entiteiten is de manier waarop een XML-parser wordt overgehaald bestanden te lezen van de machine waarop hij draait — de aanval die meestal XXE wordt geschreven — en src/shared/parse-xml.js is een met de hand geschreven lezer zonder enige entiteitsafhandeling. Je tekst wordt ook nooit aan de eigen DOMParser van de browser gegeven. Een DOCTYPE wordt doorgegeven zonder ooit uitgevoerd te worden.

Wat gaat er verloren bij het omzetten van XML naar JSON?

De volgorde van gemengde inhoud, de commentaren, en het verschil tussen een attribuut en een kindelement — dat laatste eerder verzacht dan gewist, want een attribuut wordt een lid waarvan de naam met @ begint. De eigen tekst van een element wordt #text zodra hij naast iets anders moet staan, en herhaalde kinderen worden een array. Elke waarde blijft een tekenreeks: XML heeft geen types, en beslissen dat 8080 een getal was zou informatie verzinnen zijn.

Wat gaat er verloren bij het omzetten van JSON naar XML?

Het verschil tussen een leeg object, een lege array en een lege tekenreeks, die alle drie een leeg element worden, en het type van elke waarde, want XML heeft geen types. Een array wordt een herhaald element, de enige vorm die terugleest, en bij een sleutel die een elementnaam niet kan dragen worden de lastige tekens vervangen in plaats van dat er een document uitkomt dat geen enkele parser leest.

Kan het een SVG, een RSS-feed of een POM-bestand formatteren?

Ja. Alle drie zijn XML, en dit leest XML in plaats van een bepaald dialect ervan. Een zo uitgelegde SVG is makkelijker met de hand te bewerken; een RSS- of Atom-feed wordt meestal plat geperst verstuurd en is onleesbaar tot iets hem openvouwt. Aan wat het document betekent verandert de opmaak niets.

Verandert opnieuw laten inspringen wat de XML betekent?

Bij een document waarvan de elementen andere elementen bevatten niet. Waar het wel kan uitmaken is tekst: witruimte binnen een element dat woorden bevat hoort bij die tekst, dus een element dat niets dan tekst bevat blijft op één regel staan in plaats van opengevouwen te worden. CDATA-secties worden precies overgenomen zoals ze waren.

Waarom niet gewoon de eigen XML-parser van de browser gebruiken?

Vanwege wat hij zegt als het document stuk is. De DOMParser geeft een foutdocument terug waarvan de bewoording in elke browser anders is en dat vaak neerkomt op ‚fout op regel 1‘. Een met de hand geschreven lezer kan zeggen welke tag nooit gesloten is, en waar hij geopend werd, en dat is precies wat je moest weten. Geen externe entiteiten oplossen is de andere reden.

Hoe groot mag het bestand zijn?

Er is hier geen limiet ingesteld, want er is geen server die ervoor betaalt. Het echte plafond is je eigen apparaat: een paar megabyte XML gaat prima, en bij een heel lang document wacht de pagina op een pauze in je typen voordat ze opnieuw formatteert, in plaats van met je om het toetsenbord te vechten.

Is het gratis, en heb ik een account nodig?

Het is gratis, en er is geen account, geen inloggen, geen proefperiode en geen limiet op hoeveel je plakt. De site draait op advertenties, want die betalen hem; de advertenties krijgen niets over je tekst.

Werkt het offline?

Ja. Laad de pagina één keer, trek daarna de stekker uit het internet en ze blijft werken. Dat is meteen de eenvoudigste manier om te bewijzen dat er niets geüpload wordt: gereedschap dat je XML wegstuurt om geformatteerd te worden zou stoppen op het moment dat je de stekker eruit trekt.