XML to HTML
Render XML as HTML you can paste into a page: a table built from the document's repeating record element, or a nested list that mirrors the whole tree. Every value is escaped, and a live preview shows exactly what the markup produces.
XML to HTML
In table mode the tool finds the element that repeats most often — <item> in an RSS feed, <book> in a catalogue — and turns each occurrence into a row, with a column per child element and (optionally) per attribute. In list mode it walks the whole document and emits nested <ul>s instead, which suits documents that are not tabular at all.
How to use it
- Paste your XML, or drop a file on the left pane.
- Leave Record element on
autoto use the most-repeated element, or type a name to pick one yourself. - Switch to nested list for documents that are trees rather than tables.
- Read the preview below the panes, then copy the markup or download the file.
How the record element is chosen
Every parent/child element pair in the document is counted, and the pair with the most occurrences wins — so a feed with 40 <item> children of <channel> gives you a 40-row table. If nothing repeats at least twice, the root's children are used instead.
That heuristic is right most of the time and wrong occasionally, which is why the Record element box exists: type entry, product, or whatever your records are actually called and the guess is skipped.
Columns, including nested ones
A record's direct children become columns, in first-seen order across all records — so a field that only some records carry still gets a column, with empty cells elsewhere. One level of nesting is flattened into dotted column names: a <price><amount> pair becomes a price.amount column.
With include attributes on, attributes become their own columns prefixed with @, and an attribute on a child element appears as child@attr. Namespace declarations are skipped — they are not data.
Escaping
Every element name and value is HTML-escaped on the way out, so a document containing <script> in a text node produces visible text, not executable markup. The only thing you control directly is the CSS class name, which is escaped for attribute context.
FAQ
Why does my table have the wrong rows?
The auto-detected record element was not the one you meant — common in documents with deeply repeated wrappers. Type the element name into Record element and the table is rebuilt around it.
Can I get a full HTML page rather than a fragment?
The output is a fragment (a <table> or a <ul>) so it can be pasted into an existing page. Wrap it in your own document shell if you need a standalone file — that way it picks up your stylesheet rather than one invented here.
Does it style the table?
No CSS is generated. Put your own class in the CSS class box and style it in your stylesheet; the preview here shows the site's default table styling.
What happens to CDATA?
CDATA content is treated as text, which is what it is. If a cell holds HTML inside CDATA it will show as escaped text rather than markup — deliberately, since injecting it would be unsafe.
Is the document uploaded?
No. Parsing, conversion, and the preview all happen in your browser.
Related tools
- XML to Markdown — the same record detection, emitted as a Markdown table
- XML to CSV — for a spreadsheet rather than a page
- XML Tree Viewer — browse the document interactively instead of exporting it
- XSLT Tester — when you need full control over the HTML shape
- RSS to JSON — if the document is a feed
Privacy
100% client-side. Conversion and preview both run in the page. See the privacy policy.