What this converter refuses to guarantee
JSON Schema describes JSON. XML carries order, mixed content, namespaces, and xsi:type tricks your sample might never show. A draft built from one file will miss optional branches you have not pasted yet.
We recommend treating output as a conversation starter for reviewers, not as law.
How the page turns tags into keywords
The browser parses your string with DOMParser, walks element nodes, and maps each tag name to a camel-cased property. Text-only leaves become string, integer, number, or boolean when the literal looks unambiguous. Nested elements become nested object schemas with their own properties maps.
Strict mode mirrors every sibling you saw into required, which feels tight for demos and often too tight for real payloads. Turn strict mode off when you want a looser skeleton.
Snapshot: invoice line you could paste
Below is a compact before and after table for a hypothetical LineItem fragment priced at 24.99 on 2024-11-02. Your own XML will differ, but the pattern repeats.
| XML idea | Schema effect |
|---|---|
<Sku>WIDGET-12</Sku> | Property sku typed as string, optional example value |
<Qty>3</Qty> | Property qty typed as integer |
<Discount percent="10" /> | Nested object with @attributes.percent when attributes stay enabled |
Where a draft like this earns its keep
- API designers mocking a JSON façade while legacy XML still feeds the warehouse.
- QA engineers pairing samples with fixtures before full parity tests land.
- Workshops where newcomers compare tree XML against JSON Schema vocabulary side by side.
When you only need JSON data without schema metadata, switch to our XML to JSON tool so you are not carrying $schema keywords you will not use.
Stop if you expect XSD-perfect rules
Regular expressions, xs:choice groups, and cross-field rules do not fall out of a single DOM walk. You will still add pattern, enum, oneOf, and if/then blocks manually.
Large files also slow interactive editing. Trim to the smallest representative subtree first, generate, then merge by hand in your editor of choice.
Namespaces, prefixes, and what survives the walk
Tag names arrive from the DOM as expanded local names in modern browsers, yet two different prefixes might point at different URIs while looking identical on screen. Before you paste production feeds, strip or normalize namespaces in a dedicated pipeline, then run the sample here.
Comments, processing instructions, and CDATA wrappers disappear from the structural view this script cares about. If your contract depends on any of those, note the gap in your review checklist.
- Example toggle
- Include examples pulls literal text nodes into
examplesarrays. Helpful for demos, noisy for public docs. Turn the toggle off when you publish a schema customers read. - Description toggle
- Auto descriptions repeat tag names in a polite sentence. Useful while learning, redundant once you replace copy with domain language from your product team.
Pair this page with XML Validator on the first pass. A typo five levels deep wastes more time than a quick syntax check.
Repeated siblings need your editorial eye
XML allows twelve <Item> rows in a row. JSON Schema expresses repetition with type: "array" plus an items schema. This converter inspects one snapshot at a time, so duplicate tag names collapse into a single property definition unless you reshape the XML first.
Workflows we see in the wild: wrap repeated rows inside a container element, convert once, then hand-edit the array branch. Another path runs through XML to JSON to study how your parser materializes arrays before you lock schema wording.
Neither path is automatic here on purpose. Array shape is a design call tied to your API versioning rules, not something a single sample should guess.
Security note for pasted payloads
Malicious XML sometimes includes billion-laughs expansion or external entity tricks. Browser parsers apply their own guardrails, yet you should avoid pasting untrusted megabyte dumps into any online form. For hostile inputs, use offline tooling inside a sandbox you control.
