What this tool does
The document becomes a YAML mapping, with the same shape XML-to-JSON produces — attributes as @_-prefixed keys, text under #text when an element carries both, a sequence when an element repeats.
<user id="1"><name>Ada</name></user>
user:
name: Ada
"@_id": "1"
Why those keys are quoted
Two of the characters this mapping produces are reserved in YAML.
@ cannot begin a plain scalar — the specification reserves it — so @_id has to be quoted. # opens a comment, so #text written bare would make the rest of the line vanish. Quoting them is not decoration; it is the only way to write them.
Why some values are quoted too
YAML has two versions in wide use, and they disagree about what a bare word means.
| written plainly | YAML 1.2 reads | YAML 1.1 reads |
|---|---|---|
NO | the string NO | false |
yes | the string yes | true |
12:30 | the string 12:30 | 750 (sexagesimal) |
2026-01-01 | the string | a timestamp |
YAML 1.2 is what most JavaScript libraries write. YAML 1.1 is what PyYAML implements, and PyYAML is what a very large share of the world actually reads YAML with.
So a country code NO, written plainly, becomes False in Python. That is the “Norway problem”, and nothing in the file signals it — the document is valid either way, it simply stops meaning the same thing.
This tool quotes exactly those ambiguous scalars and nothing else. A real boolean stays true, a real null stays null, an ordinary word stays bare. The output is valid YAML 1.2, and both readers find the same values in it.
Multi-line text
Text containing line breaks becomes a block scalar:
a: |-
first line
second line
That is YAML’s readable form for exactly this, and it round-trips without escapes.
Private by design
Everything runs locally in your browser with JavaScript. Your data is never uploaded, which makes the tool safe for sensitive content, and it keeps working offline.