Convert XML to JSON, CSV, XLSX, PDF, SQL on Windows servers — with XSLT support and no XML libraries required.
Windows
2000/2003/Vista
7/8/10/11
and
2012/2016 / 2019/2022 Server
and
Docker / Citrix / Wine
Total XML Converter X is a server-side SDK that converts XML to JSON, CSV, XLSX, PDF, HTML, SQL, DBF, Access, and 10+ other formats — with full XSLT support and no external XML libraries on the server. It runs headless: no GUI, no dialogs, no popups. Total XML Converter X ships with both a command-line binary and an ActiveX/COM interface, so it drops into ASP, PHP, .NET, Python, Ruby, Java, and any other COM-aware backend. Output formats split into two groups:
-xslt — no two-step pipeline needed
table (expand repeated elements into rows), highlight (syntax-coloured tree for human review), report (tabular report from a tables definition file)
-Recurse -kfs), batch combining of multiple XMLs into one PDF (-combine -sort name), and queue-file processing (-list) for unattended runs. Server-friendly flags -msuccess, -merror, and -IgnoreInvalidSource let a single bad file route to a quarantine folder without aborting the batch.The program processes XML directly — no .NET XML serializer needed, no Saxon or Xalan installation, no msxml dependency surprises after a Windows update.
High converting speed and batch conversions result in a simple and boredom-free process. Try it for free (30 days trial period, no limitations) and find out that it is really worth its money.
Some of the currently supported file format conversions:
|
|
|
LLM agents (Claude, ChatGPT, Cursor, Cline) and retrieval frameworks (LangChain, LlamaIndex, Haystack) do not read raw XML well — nested tags and attributes are noise to embedding models. Total XML Converter X writes XML to GitHub-Flavored Markdown with structured frontmatter and an optional Docling-compatible sidecar, so an XML document lands in your vector store as a clean section-aware text representation — with the element hierarchy mapped to Markdown headings and repeated elements turned into tables, not as one giant string of angle brackets.
What you get when you target Markdown output:
#, child elements become ## / ### / #### by depth; attributes are rendered as a key-value list directly under each heading
table rendering method used for XML-to-XLSX kicks in for Markdown: sibling elements with the same tag and identical child shape become rows in one table with auto-detected typed columns
-xslt stylesheet.xsl to reshape the XML before Markdown rendering, the same one-step pipeline used for the other output formats
source_file, format (MIME), root_element, namespaces, element_count, depth, detected schema (when XSD/DTD is referenced), generator, created, and a binary_hash for provenance
.docling.json sidecar — Docling-schema JSON with typed columns from auto-detected tables (with units like EUR, pcs, %), per-element anchors back into the source XML (XPath), namespace map, and a chunks_hint array your splitter can read
This is the CoolUtils RAG Adapter — a unified Markdown contract shared by every Total Converter X product. Full specification, sample .md + .docling.json, and integration snippets live on the Coolutils Converter X — RAG Adapter page.
(includes 30 day FREE trial)
(only $750.00)
string src = @"C:\test\Source.xml";
string dest = @"C:\test\Dest.json";
var cnv = new XMLConverterX();
cnv.Convert(src, dest, "-cJSON -log c:\\test\\XML.log");
if (!string.IsNullOrEmpty(cnv.ErrorMessage))
throw new Exception(cnv.ErrorMessage);
public static class Function1
{
[FunctionName("Function1")]
public static async Task Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
StringBuilder sbLogs = new StringBuilder();
sbLogs.AppendLine("started...");
try
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
var assemblyDirectoryPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
assemblyDirectoryPath = assemblyDirectoryPath.Substring(0, assemblyDirectoryPath.Length - 4);
var executablePath = $@"{assemblyDirectoryPath}\Converter\XMLConverterX.exe";
sbLogs.AppendLine(executablePath + "...");
var srcPath = $@"{assemblyDirectoryPath}\src\sample.xml";
var outPath = Path.GetTempFileName() + ".json";
startInfo.FileName = executablePath;
if (File.Exists(outPath))
{
File.Delete(outPath);
}
if (File.Exists(executablePath) && File.Exists(srcPath))
{
sbLogs.AppendLine("files exists...");
}
else
sbLogs.AppendLine("EXE & source files NOT exists...");
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = $"{srcPath} {outPath}";
using (Process exeProcess = Process.Start(startInfo))
{
sbLogs.AppendLine($"wait...{DateTime.Now.ToString()}");
exeProcess.WaitForExit();
sbLogs.AppendLine($"complete...{DateTime.Now.ToString()}");
}
int sleepCounter = 10;
while(!File.Exists(outPath) && sleepCounter > 0)
{
System.Threading.Thread.Sleep(1000);
sbLogs.AppendLine("sleep...");
sleepCounter--;
}
if (File.Exists(outPath))
sbLogs.AppendLine("Conversion complete successfully.");
}
catch (Exception ex)
{
sbLogs.AppendLine(ex.ToString());
}
return new OkObjectResult(sbLogs);
}
}
dim C
Set C=CreateObject("XMLConverter.XMLConverterX")
C.Convert "c:\source.xml", "c:\dest.json", "-cJSON -log c:\XML.log"
Response.Write C.ErrorMessage
set C = nothing
dim C
Set C=CreateObject("XMLConverter.XMLConverterX")
Response.Clear
Response.AddHeader "Content-Type", "binary/octet-stream"
Response.AddHeader "Content-Disposition", "attachment; filename=test.json"
Response.BinaryWrite C.ConvertToStream("C:\www\ASP\Source.xml", "C:\www\ASP", "-cJSON -log c:\XML.log")
set C = nothing
$src="C:\\test\\test.xml";
$dest="C:\\test\\test.json";
if (file_exists($dest)) unlink($dest);
$c= new COM("XMLConverter.XMLConverterX");
$c->convert($src,$dest, "-cJSON -log c:\\test\\XML.log");
if (file_exists($dest)) echo "OK"; else echo "fail:".$c->ErrorMessage;
require 'win32ole'
c = WIN32OLE.new('XMLConverter.XMLConverterX')
src = "C:\\test\\test.xml"
dest = "C:\\test\\test.json"
c.convert(src, dest, "-cJSON -log c:\\test\\XML.log")
if not File.exist?(dest)
puts c.ErrorMessage
end
import win32com.client
import os.path
c = win32com.client.Dispatch("XMLConverter.XMLConverterX")
src = "C:\\test\\test.xml"
dest = "C:\\test\\test.json"
c.convert(src, dest, "-cJSON -log c:\\test\\XML.log")
if not os.path.exists(dest):
print(c.ErrorMessage)
uses Dialogs, Vcl.OleAuto;
var
c: OleVariant;
begin
c := CreateOleObject('XMLConverter.XMLConverterX');
c.Convert('c:\test\source.xml', 'c:\test\dest.json', '-cJSON -log c:\test\XML.log');
if c.ErrorMessage <> '' then
ShowMessage(c.ErrorMessage);
end;
var c = new ActiveXObject("XMLConverter.XMLConverterX");
c.Convert("C:\\test\\source.xml", "C:\\test\\dest.json", "-cJSON");
if (c.ErrorMessage != "")
alert(c.ErrorMessage)
use Win32::OLE; my $src = "C:\\test\\test.xml"; my $dest = "C:\\test\\test.json"; my $c = CreateObject Win32::OLE 'XMLConverter.XMLConverterX'; $c->convert($src, $dest, "-cJSON -log c:\\test\\XML.log"); print $c->ErrorMessage if -e $dest;
"Total XML Converter X seems to be perfect for my use, though we use it only to convert old .xml files to other formats. We chose the program for the ability to process XSLT files. We had over 6,000 XMLs and the converter did the job in less than an hour. Thank you!"
Jean Robitaille
Sparktown Christian School
"We translate partner XML feeds (orders, ASN, invoices) into our internal JSON schema. Total XML Converter X with -xslt is the engine: each partner has their own stylesheet, the converter applies it on the fly, and the JSON drops straight into Kafka. We replaced a Java/Saxon container that was eating 2GB of RAM for the same job. The Windows binary uses around 60MB and runs at twice the throughput."
Lukas R.
Senior Backend Developer at an EDI integration vendor
"Our customers submit XBRL/XML compliance filings that we have to render as PDF for human auditors. Total XML Converter X with -method report and a tables definition file produces clean, paginated PDF output without us writing our own renderer. The -msuccess/-merror queue routing is exactly what we needed for the watcher-driven pipeline. Five years in production, no surprises."
Carmen V.
DevOps Engineer at a regulatory-reporting platform
"Bundled Total XML Converter X into our data-migration tool under the Royalty-Free License. The one-time per-project fee was a fraction of what Altova MapForce wanted on a per-developer subscription. Our installer ships and registers the ActiveX, our app calls it directly, end users see only our UI. The 32-bit ActiveX limitation cost us a couple of days of pipeline rework, but support was responsive when we asked about workarounds."
Halil B.
Independent Software Vendor
"Customers email us nightly XML dumps from twenty different ERP systems. We use Total XML Converter X to flatten everything into XLSX with -detectcell -plain so analysts can pivot directly without a separate ETL tool. Throughput is around 200 XMLs per second on our hardware for typical sub-MB files. The CLI is deterministic across runs; same input, same flags, bit-identical bytes."
Felipe O.
Lead .NET Developer at a SaaS analytics firm
Total XML Converter X ships with XMLConverterX.exe, a console binary you can drive from scripts, scheduled tasks, CI runners, or any backend service. Output covers the data side (JSON, CSV, Excel, SQL, DBF, Access) and the document side (PDF, HTML, DOC, RTF, TXT, TIFF, JPEG, PNG). The recipes below cover the cases we hear about most often from SDK customers.
The smallest possible call — one source, one output, one target format.
XMLConverterX.exe "C:\inbox\invoice.xml" "C:\out\invoice.pdf" -cPDF
The fastest way to feed legacy XML into a modern JSON pipeline. Mask matches every XML in the folder; output gets one JSON file per input.
XMLConverterX.exe "C:\inbox\*.xml" "C:\out\" -cJSON
-detectcell infers numeric, date, and text columns from the data so figures stay summable in the resulting workbook. -plain flattens nested elements into one wide table.
XMLConverterX.exe "C:\reports\*.xml" "C:\out\" -cExcel -detectcell -plain
European locales, downstream parsers, and spreadsheet imports all want different separators. -separator sets the field separator; -comma sets the quote character (use char codes like #39 for an apostrophe).
XMLConverterX.exe "C:\inbox\*.xml" "C:\out\" -cCSV -separator ";" -comma "\""
When the source XML doesn't match the target schema, run it through an XSLT first. -xslt applies the stylesheet to every input on the fly — no two-step pipeline needed.
XMLConverterX.exe "C:\inbox\*.xml" "C:\out\" -cPDF -xslt "C:\xsl\invoice-to-pdf.xsl"
The -method flag controls how XML structure becomes visible output. table expands repeated elements into rows; highlight renders the XML tree with syntax colouring (good for human review); report generates a tabular report based on a tables definition file.
XMLConverterX.exe "C:\inbox\config.xml" "C:\out\config.pdf" -cPDF -method highlight
XMLConverterX.exe "C:\inbox\orders.xml" "C:\out\orders.xlsx" -cExcel -method report -tables "C:\schemas\orders.tbl"
For data lakes and document archives organised in subfolders. -Recurse walks subdirectories; -kfs recreates the same tree on the output side instead of flattening everything into one bucket.
XMLConverterX.exe "C:\datalake\*.xml" "C:\out\" -cJSON -Recurse -kfs
Roll up a folder of small XMLs into a single multi-page PDF for review or audit. -sort name keeps the order predictable.
XMLConverterX.exe "C:\reports\*.xml" "C:\out\daily-report.pdf" -cPDF -combine -sort name
The standard backend pattern: a watcher drops files into inbox, the converter clears it, processed files land in done, files it couldn't handle land in quarantine for review. -IgnoreInvalidSource keeps a single bad file from aborting the whole batch.
XMLConverterX.exe "C:\inbox\*.xml" "C:\out\" -cJSON -msuccess "C:\done" -merror "C:\quarantine" -IgnoreInvalidSource -threads 0
When upstream writes a queue file and the converter consumes it, the file paths shouldn't be encoded in the command line. -list reads file masks (one per line) from a text file. The destination accepts <DATE> and <TIME> macros so each run gets its own bucket.
XMLConverterX.exe -list "C:\queues\nightly.txt" "C:\out\<DATE>\" -cPDF -log "C:\logs\xmlcx.log" -verbosity detail -logmode append
Development teams that convert XML to CSV, JSON, and PDF on servers via ActiveX or command line
Power server-side XML-to-CSV and XML-to-JSON tools
Web developers integrate Total XML ConverterX via ActiveX into ASP or PHP applications. Users upload XML files through a browser, the server converts them to CSV, JSON, or PDF silently with no pop-up messages, and returns the result. Sample code files are included to speed up integration.
Transform XML feeds into formats other systems require
Enterprise IT teams use Total XML ConverterX to bridge systems that speak different data languages. Convert XML exports from one platform into CSV for spreadsheet-based tools, JSON for web APIs, or PDF for human review — all automated via command line with original timestamps preserved.
Batch-convert XML data feeds in scheduled pipelines
Data engineering teams add Total XML ConverterX as a conversion step in ETL workflows. Nightly XML dumps from databases, partner APIs, or IoT systems are converted to CSV for analytics platforms or JSON for data lakes. Folder structure is preserved and errors are logged silently for monitoring.
Format or minify XML documents on the server
Content platforms and publishing systems use Total XML ConverterX to format raw XML into human-readable form for editors, or minify verbose XML to reduce storage and transfer size. Process sophisticated XML structures in batch while keeping the original document hierarchy intact.
Convert XML submissions to PDF reports for auditors
Regulated industries receive or generate XML data for compliance filings. Total XML ConverterX converts these XML files to PDF reports for auditor review or to CSV for import into compliance databases — running unattended on servers with no GUI interruptions and full error logging.
Updated Fri, 01 May 2026
(only $750.00)
-c flag.new COM("XMLConverter.XMLConverterX") in PHP, new XMLConverterX() in .NET, win32com.client.Dispatch in Python, WIN32OLE.new in Ruby. Alternatively, the XMLConverterX.exe command-line binary can be invoked from any process, scheduler, or shell script. Direct streaming via ConvertToStream is also available for ASP/PHP web responses.-xslt "C:\xsl\stylesheet.xsl" to apply an XSLT to every input XML on the fly. The output is then written in the format selected by -c. This collapses what would otherwise be a two-step pipeline (XSLT processor + converter) into a single binary call. We use this for invoice formats, EDI translations, and schema-mapping workflows.-msuccess "C:\done" moves successfully-converted files into a done folder, -merror "C:\quarantine" routes failures to a quarantine folder, and -IgnoreInvalidSource keeps a single bad file from aborting the whole batch. Combined with -list queue-file input and -log -verbosity detail, the binary fits a watcher-driven backend pipeline cleanly..md as the output format and the converter writes the XML's element hierarchy as Markdown headings: the root is #, child elements are ##/###/#### by depth, attributes appear as a key-value list under each heading. Repeated sibling elements with the same tag and identical child shape are auto-detected and rendered as GFM tables with typed columns, the same rendering used for XML-to-XLSX. A YAML frontmatter block carries source_file, root_element, namespaces, element_count, detected schema (when XSD/DTD is referenced), and a binary hash. This is part of the CoolUtils RAG Adapter — the same Markdown contract is shared by every Total Converter X product.binary_hash for provenance, and a chunks_hint array. Enable with -Docling on the command line.-xslt "C:\xsl\reshape.xsl" together with -cMD -Docling and the XSLT is applied to every input on the fly, then the result is written as Markdown. This collapses what would otherwise be a two-step pipeline (XSLT processor + converter) into a single binary call — useful for EDI translations, invoice formats, and schema-mapping workflows that need to land in a RAG index in a specific normalized shape..md file is plain GFM with a YAML frontmatter block, so LangChain's UnstructuredMarkdownLoader, LlamaIndex's MarkdownReader, Haystack's MarkdownToDocument, and Claude Code's MCP file tools read it directly. Because element XPaths are recorded in the sidecar, a citation in the model's answer can resolve back to the exact source element. For Claude, ChatGPT, or any chat UI you can paste the Markdown into context as-is.Updated Fri, 01 May 2026
(only $750.00)
Download free trial and convert your files in minutes.
No credit card or email required.