通过命令行转换 XML 至 JSON、XML、CSV、PDF
Windows
2000/2003/Vista
7/8/10/11
and
2012/2016/2019/2022 Server
and
Docker/Citrix/Wine
Total XML Converter X 是一款服务器端 SDK,可将 XML 转换为 JSON、CSV、XLSX、PDF、HTML、SQL、DBF、Access 以及其他 10 多种格式 — 完整支持 XSLT,无需在服务器上安装任何外部 XML 库。它以无界面方式运行:没有 GUI,没有对话框,没有弹窗。Total XML Converter X 同时提供 命令行 二进制文件和 ActiveX/COM 接口,可直接接入 ASP、PHP、.NET、Python、Ruby、Java 以及任何支持 COM 的后端。输出格式分为两组:
-xslt 即时对每个输入应用样式表 — 无需两步流水线
table(将重复元素展开为行)、highlight(带语法着色的树状视图,便于人工查阅)、report(基于表定义文件生成的表格化报告)
-Recurse -kfs)、批量将多个 XML 合并为单个 PDF(-combine -sort name),以及通过队列文件处理(-list)实现无人值守运行。-msuccess、-merror 与 -IgnoreInvalidSource 等服务器友好的参数可让单个错误文件被路由到隔离文件夹,而不会中止整个批处理。本程序直接处理 XML — 无需 .NET XML 序列化器,无需安装 Saxon 或 Xalan,也不会在 Windows 更新后出现 msxml 依赖问题。
转换速度高且支持批量转换,使整个流程简单而不枯燥。免费试用 30 天(无任何功能限制),亲自体验它的物超所值。
当前支持的部分格式转换:
|
|
|
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 似乎完全符合我的需求,尽管我们只用它将旧的 .xml 文件转换为其他格式。我们选择这款程序是因为它能够处理 XSLT 文件。我们有 6,000 多个 XML 文件,转换器在不到一小时内就完成了任务。谢谢!"
Jean Robitaille
Sparktown Christian School
"我们将合作伙伴的 XML 数据流(订单、ASN、发票)转换为内部 JSON 架构。Total XML Converter X 配合 -xslt 就是核心引擎:每个合作伙伴都有自己的样式表,转换器即时应用,生成的 JSON 直接进入 Kafka。我们替换掉了一个为同样工作占用 2GB 内存的 Java/Saxon 容器。这个 Windows 二进制文件大约只占用 60MB 内存,吞吐量却是原来的两倍。"
Lukas R.
Senior Backend Developer at an EDI integration vendor
"我们的客户提交 XBRL/XML 合规申报文件,我们必须将它们渲染为 PDF 供人工审计员查阅。Total XML Converter X 配合 -method report 和表定义文件,可生成干净、分页良好的 PDF 输出,无需我们自行编写渲染器。-msuccess/-merror 队列路由正是我们这个由监视器驱动的流水线所需要的。已稳定使用五年,毫无意外。"
Carmen V.
DevOps Engineer at a regulatory-reporting platform
"我们以 Royalty-Free License 将 Total XML Converter X 打包到自家的数据迁移工具中。一次性按项目付费的成本仅为 Altova MapForce 按开发者订阅价格的零头。我们的安装程序会发布并注册 ActiveX,应用直接调用它,最终用户只看到我们自己的 UI。32 位 ActiveX 的限制让我们花了一两天时间调整流水线,但当我们询问变通方案时支持团队反应很迅速。"
Halil B.
Independent Software Vendor
"客户每晚通过邮件发送来自 20 套不同 ERP 系统的 XML 转储。我们使用 Total XML Converter X 配合 -detectcell -plain 将所有内容拉平为 XLSX,分析师无需单独的 ETL 工具就能直接进行透视。在我们的硬件上,针对常见的不到 1MB 的文件,吞吐量约为每秒 200 个 XML。CLI 在多次运行间表现一致;相同的输入、相同的参数,输出字节完全一致。"
Felipe O.
Lead .NET Developer at a SaaS analytics firm
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.
Total XML Converter X 附带 XMLConverterX.exe,这是一个可以从脚本、计划任务、CI 运行器或任何后端服务驱动的控制台二进制程序。输出涵盖数据端(JSON、CSV、Excel、SQL、DBF、Access)和文档端(PDF、HTML、DOC、RTF、TXT、TIFF、JPEG、PNG)。下面的配方涵盖了我们最常从 SDK 客户那里听到的场景。
最简单的调用方式 —— 一个源、一个输出、一个目标格式。
XMLConverterX.exe "C:\inbox\invoice.xml" "C:\out\invoice.pdf" -cPDF
将旧版 XML 馈送到现代 JSON 管道的最快方法。掩码匹配文件夹中的每个 XML;输出为每个输入获得一个 JSON 文件。
XMLConverterX.exe "C:\inbox\*.xml" "C:\out\" -cJSON
-detectcell 从数据中推断数字、日期和文本列,因此数字在结果工作簿中保持可求和。-plain 将嵌套元素展平为一个宽表。
XMLConverterX.exe "C:\reports\*.xml" "C:\out\" -cExcel -detectcell -plain
欧洲区域设置、下游解析器和电子表格导入都需要不同的分隔符。-separator 设置字段分隔符;-comma 设置引号字符(使用字符代码,例如 #39 表示撇号)。
XMLConverterX.exe "C:\inbox\*.xml" "C:\out\" -cCSV -separator ";" -comma "\""
当源 XML 与目标架构不匹配时,先通过 XSLT 运行它。-xslt 即时将样式表应用于每个输入 —— 无需两步管道。
XMLConverterX.exe "C:\inbox\*.xml" "C:\out\" -cPDF -xslt "C:\xsl\invoice-to-pdf.xsl"
-method 标志控制 XML 结构如何成为可见输出。table 将重复元素扩展为行;highlight 用语法着色渲染 XML 树(适合人工审查);report 基于表定义文件生成表格报告。
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"
对于在子文件夹中组织的数据湖和文档档案。-Recurse 遍历子目录;-kfs 在输出端重新创建相同的树,而不是将所有内容展平到一个桶中。
XMLConverterX.exe "C:\datalake\*.xml" "C:\out\" -cJSON -Recurse -kfs
将一个文件夹的小 XML 汇总为单个多页 PDF 用于审查或审计。-sort name 保持顺序可预测。
XMLConverterX.exe "C:\reports\*.xml" "C:\out\daily-report.pdf" -cPDF -combine -sort name
标准的后端模式:监视器将文件放入 inbox,转换器清空它,处理过的文件落到 done,无法处理的文件落到 quarantine 等待审查。-IgnoreInvalidSource 防止单个坏文件中止整个批次。
XMLConverterX.exe "C:\inbox\*.xml" "C:\out\" -cJSON -msuccess "C:\done" -merror "C:\quarantine" -IgnoreInvalidSource -threads 0
当上游写入队列文件而转换器消耗它时,文件路径不应编码在命令行中。-list 从文本文件中读取文件掩码(每行一个)。目标接受 <DATE> 和 <TIME> 宏,因此每次运行都获得自己的桶。
XMLConverterX.exe -list "C:\queues\nightly.txt" "C:\out\<DATE>\" -cPDF -log "C:\logs\xmlcx.log" -verbosity detail -logmode append
-c 参数生成上述任意格式。new COM("XMLConverter.XMLConverterX"),.NET 中使用 new XMLConverterX(),Python 中使用 win32com.client.Dispatch,Ruby 中使用 WIN32OLE.new。此外,XMLConverterX.exe 命令行二进制文件也可由任意进程、调度器或 shell 脚本调用。同时还提供 ConvertToStream 直接流式输出,适用于 ASP/PHP 的 Web 响应。-xslt "C:\xsl\stylesheet.xsl" 即可对每个输入 XML 即时应用 XSLT,随后按 -c 选择的格式写入输出。这样原本需要两步的流水线(XSLT 处理器 + 转换器)就能合并为一次二进制调用。我们将其用于发票格式、EDI 翻译以及架构映射等工作流。-msuccess "C:\done" 将转换成功的文件移至完成文件夹,-merror "C:\quarantine" 将失败文件路由到隔离文件夹,-IgnoreInvalidSource 防止单个错误文件中止整个批处理。再配合 -list 队列文件输入和 -log -verbosity detail,二进制文件可干净地融入由监视器驱动的后端流水线。