Tree-View, XPath, XSLT, XSD — alles in einem Werkzeug, wie Altova XMLSpy.
{{ ex }}
Der CalcSI XML Editor ist ein kostenloses Online-Werkzeug im Stil von Altova XMLSpy. Du kannst XML-Dokumente komfortabel in einer voll editierbaren Baum-Ansicht oder als reinen Text bearbeiten — inklusive XPath-Tester, XSLT-Transformation, XSD-Validierung und automatischer Schema-Generierung.
Bearbeitung, XPath-Abfragen und XSLT-Transformationen laufen direkt im Browser. Für XSD-Schema-Validierung und automatische Schema-Generierung nutzen wir die libxml-Bibliothek auf unserem Server — schnell, standardkonform und ohne dass du Software installieren musst.
Die Bearbeitung, XPath-Abfragen, XSLT-Transformationen und JSON-/CSV-Konvertierung laufen vollständig in deinem Browser — diese Daten verlassen dein Gerät nicht. Nur für XSD-Schema-Validierung und automatische Schema-Generierung wird das XML (zusammen mit einem optionalen XSD) zu unserem Server geschickt, dort verarbeitet und sofort wieder verworfen — wir speichern nichts.
XML wurde 1998 als W3C Recommendation veröffentlicht und ist trotz der JSON-Dominanz weiterhin Standard in vielen Bereichen: SOAP-Webservices, SEPA-/ISO-20022-Finanztransaktionen, RSS/Atom-Feeds, SVG-Grafiken, Office-Dokumente (DOCX, ODF), Android-Layouts, Maven/Gradle-Configs und EDI-Austausch. Im Gegensatz zu JSON unterstützt XML Namespaces (xmlns:soap="…"), Attribute auf Elementen, Mixed Content (Text + Kinderknoten), Kommentare, CDATA-Blöcke und Processing Instructions. Diese Ausdruckskraft macht XML mächtiger, aber auch komplexer.
Drei W3C-Standards begleiten XML praktisch jeden Tag: XSD (XML Schema Definition) beschreibt Struktur, Typen und Constraints (vergleichbar mit JSON Schema, aber älter und strenger); XPath (aktuell 3.1) ist eine deklarative Abfragesprache für XML-Knoten, etwa //book[author='Anna']/title; und XSLT transformiert XML in HTML, andere XML-Strukturen oder Plain Text. Dieser Editor stellt alle drei zur Verfügung: Sie bearbeiten im Tree- oder Text-View, validieren gegen Ihr XSD, testen XPath-Ausdrücke und führen XSLT-Transformationen direkt im Browser oder per Server-Helper aus.
Wer von JSON kommt, stolpert oft über drei Eigenheiten: erstens den Prolog — eine Datei sollte mit einer Deklaration wie <?xml version="1.0" encoding="UTF-8"?> beginnen. Zweitens das Root-Element: XML braucht genau eins, während JSON beliebig viele Top-Level-Werte erlaubt. Drittens die Trennung von Attributen und Kindknoten: in XML <user id="42">Anna</user> existieren ID und Name auf verschiedenen "Ebenen" — beim Konvertieren in JSON taucht das typischerweise als {"id":"42","#text":"Anna"} oder mit Präfix @_id auf.
Fünf konkrete Workflows decken die häufigsten Aufgaben ab:
//book[price < 20]/title ein, um alle Buchtitel unter 20 Euro zu listen. Der Tester nutzt den nativen document.evaluate des Browsers (XPath 1.0) und gibt Treffer mit Pfad-Kontext zurück.Element 'price' is not allowed here), die im Editor highlightet werden.@_ abgebildet, Text-Knoten als #text — Standardkonvention für die spätere Weiterverarbeitung.Diese typischen XML-Szenarien kommen täglich vor:
<?xml version="1.0" encoding="UTF-8"?><root><item id="1">Anna</item></root> — komplettes wohlgeformtes Dokument mit Encoding-Hinweis.//book[@category='fiction']/title/text() alle Buchtitel der Kategorie Fiction. Die text()-Funktion extrahiert reine Textknoten.<user id="42">Anna</user> wird in JSON zu {"@_id":"42","#text":"Anna"}. Beim Roundtrip XML→JSON→XML muss der Builder wissen, welche Felder Attribute waren.<script><![CDATA[ if (a < b) doStuff(); ]]></script> bewahrt rohen Text mit <-Zeichen, ohne sie als Tag zu interpretieren — wichtig für SOAP-Payloads mit eingebettetem Code.<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">. Der Präfix soap: referenziert die deklarierte URI; XPath-Abfragen müssen mit local-name() arbeiten oder den Namespace registrieren.XML hat ein paar Klassiker, die regelmäßig in Production knallen. Erstens: XXE (XML External Entity). Ein Angreifer schiebt <!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><foo>&xxe;</foo> ein — ein naiv konfigurierter Parser liest die Datei aus und gibt sie zurück. Best Practice: DTDs und externe Entitäten deaktivieren (libxml2 LIBXML_NONET | LIBXML_NOENT deaktivieren, Java setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)). Zweitens: Billion Laughs / XML Bomb. Verschachtelte Entitäten (&lol1; → &lol2; → ...) blasen ein 1-KB-Dokument zu Gigabytes auf — auch hier hilft das Deaktivieren von Entity-Expansion. Drittens: Namespace-Hölle. SOAP- und SAML-Dokumente arbeiten mit mehreren Namespaces gleichzeitig; XPath 1.0 (Browser-Default) verlangt registrierte Namespace-Resolver, sonst bleiben Anfragen leer. Lösung: local-name()-Workaround oder ein XPath-2/3.1-Library. Viertens: Encoding-Falle. XML-Prolog deklariert das Encoding (encoding="UTF-8"); stimmt das nicht mit dem tatsächlichen Charset überein, scheitert der Parse mit "invalid character". Bei Legacy-Daten erst per iconv normalisieren. Fünftens: JSON-Roundtrip ist nicht verlustfrei. XML hat Konzepte (Mixed Content, Reihenfolge von Geschwistern, Processing Instructions), die JSON nicht abbildet. Ein <p>Hallo <b>Welt</b> gut?</p> wird in JSON eine kreative Approximation.
local-name() umgehen: //*[local-name()='Envelope']/*[local-name()='Body']. Für SOAP/SAML-Debugging ist die local-name()-Variante pragmatisch, weil sie ohne Resolver-Setup funktioniert.<!DOCTYPE>-Block Dateien vom Server lesen, interne Netzwerk-Requests auslösen oder den Parser einfrieren. Mitigationen: DTDs und Entities im Parser deaktivieren, niemals libxml_disable_entity_loader(false) setzen, in Java FEATURE_SECURE_PROCESSING aktiv lassen. OWASP listet XXE in den Top 10.xsl:try empfehlen wir Saxon-HE in einer Build-Pipeline.@_-Präfix für Attribute, #text für Text. Beim Rückweg muss der Builder dieselben Konventionen kennen, sonst landen Attribute fälschlich als Kinder.