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는 XML을 JSON, CSV, XLSX, PDF, HTML, SQL, DBF, Access를 비롯한 10여 가지 형식으로 변환하는 서버 측 SDK입니다 — 완전한 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일 무료 평가판으로 제한 없이 직접 사용해 보고 충분히 가치 있는 제품임을 확인해 보세요.
현재 지원되는 파일 형식 변환 일부:
|
|
|
LLM 에이전트(Claude, ChatGPT, Cursor, Cline)와 검색 프레임워크(LangChain, LlamaIndex, Haystack)는 원시 XML을 잘 읽지 못합니다 — 중첩된 태그와 속성은 임베딩 모델에게 노이즈입니다. Total XML Converter X는 XML을 구조화된 frontmatter와 선택적 Docling 호환 사이드카가 포함된 GitHub-Flavored Markdown으로 작성합니다. 그 결과 XML 문서가 깔끔한 섹션 인식 텍스트 표현으로 벡터 스토어에 들어갑니다 — 요소 계층이 Markdown 헤딩으로 매핑되고 반복 요소가 표로 변환되어 거대한 꺾쇠 괄호 문자열이 아닙니다.
Markdown 출력을 대상으로 했을 때 얻는 것:
#이 되고, 자식 요소가 깊이에 따라 ## / ### / ####이 됩니다. 속성은 각 헤딩 바로 아래에 key-value 목록으로 렌더링됩니다.
table 렌더링 방식이 Markdown에도 적용됩니다: 동일한 태그와 동일한 자식 형태를 가진 형제 요소가 자동 감지된 타입 열이 있는 하나의 표에서 행이 됩니다.
-xslt stylesheet.xsl을 적용하여 Markdown 렌더링 전에 XML을 재구성합니다. 다른 출력 형식에 사용되는 동일한 단일 단계 파이프라인입니다.
source_file, format(MIME), root_element, namespaces, element_count, depth, 감지된 스키마(XSD/DTD가 참조된 경우), generator, created, 그리고 출처 확인을 위한 binary_hash를 담습니다.
.docling.json 사이드카 — 자동 감지된 표의 타입이 지정된 열(EUR, pcs, % 같은 단위 포함), 소스 XML로 되돌아가는 요소별 앵커(XPath), namespace 맵, 그리고 스플리터가 읽을 수 있는 chunks_hint 배열을 포함하는 Docling-schema JSON입니다.
이것이 CoolUtils RAG Adapter입니다 — 모든 Total Converter X 제품이 공유하는 통합 Markdown 계약입니다. 전체 사양, 샘플 .md + .docling.json, 통합 스니펫은 Coolutils Converter X — RAG Adapter 페이지에 있습니다.
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 스키마로 변환합니다. -xslt와 함께 사용하는 Total XML Converter X가 그 엔진입니다: 각 파트너마다 자체 스타일시트가 있고, 변환기가 즉시 적용해 JSON이 바로 Kafka로 전달됩니다. 같은 작업을 위해 2GB 램을 잡아먹던 Java/Saxon 컨테이너를 교체했습니다. Windows 바이너리는 약 60MB만 사용하며 처리량은 두 배입니다."
Lukas R.
Senior Backend Developer at an EDI integration vendor
"저희 고객은 XBRL/XML 규정 준수 문서를 제출하고, 저희는 이를 사람 감사인을 위해 PDF로 렌더링해야 합니다. -method report와 테이블 정의 파일을 사용하는 Total XML Converter X는 자체 렌더러를 작성하지 않고도 깨끗하고 페이지가 매겨진 PDF 출력을 생성합니다. -msuccess/-merror 큐 라우팅은 워처 기반 파이프라인에 정확히 필요한 기능이었습니다. 5년간 운영 중이며 문제가 전혀 없었습니다."
Carmen V.
DevOps Engineer at a regulatory-reporting platform
"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
ActiveX 또는 명령줄을 통해 서버에서 XML을 CSV, JSON, PDF로 변환하는 개발 팀
서버 측 XML에서 CSV, XML에서 JSON 도구 구현
웹 개발자는 Total XML ConverterX를 ActiveX를 통해 ASP 또는 PHP 애플리케이션에 통합합니다. 사용자가 브라우저에서 XML 파일을 업로드하면 서버가 팝업 메시지 없이 자동으로 CSV, JSON, PDF로 변환하고 결과를 반환합니다. 통합 속도를 높이기 위한 샘플 코드 파일이 포함되어 있습니다.
XML 피드를 다른 시스템이 필요로 하는 형식으로 변환
기업 IT 팀은 Total XML ConverterX를 사용해 다른 데이터 언어를 사용하는 시스템을 연결합니다. 한 플랫폼의 XML 내보내기를 스프레드시트 도구용 CSV, 웹 API용 JSON, 사람이 검토할 PDF로 변환합니다. 원래 타임스탬프를 보존하면서 명령줄을 통해 모두 자동화됩니다.
예약된 파이프라인에서 XML 데이터 피드 일괄 변환
데이터 엔지니어링 팀은 ETL 워크플로에 변환 단계로 Total XML ConverterX를 추가합니다. 데이터베이스, 파트너 API, IoT 시스템의 야간 XML 덤프는 분석 플랫폼용 CSV나 데이터 레이크용 JSON으로 변환됩니다. 폴더 구조가 보존되고 오류는 모니터링을 위해 자동으로 기록됩니다.
서버에서 XML 문서 형식 지정 또는 최소화
콘텐츠 플랫폼과 출판 시스템은 Total XML ConverterX를 사용해 원시 XML을 편집자가 읽을 수 있는 형식으로 변환하거나, 저장 및 전송 크기를 줄이기 위해 장황한 XML을 최소화합니다. 원래 문서 계층 구조를 유지하면서 복잡한 XML 구조를 일괄 처리합니다.
감사인을 위해 XML 제출 파일을 PDF 보고서로 변환
규제 산업은 컴플라이언스 접수를 위한 XML 데이터를 받거나 생성합니다. Total XML ConverterX는 이 XML 파일을 감사인 검토용 PDF 보고서나 컴플라이언스 데이터베이스 가져오기용 CSV로 변환합니다. GUI 중단 없이 서버에서 무인으로 실행되며 전체 오류 로깅이 제공됩니다.
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 명령줄 바이너리를 모든 프로세스, 스케줄러, 셸 스크립트에서 호출할 수 있습니다. ASP/PHP 웹 응답을 위한 ConvertToStream을 통한 직접 스트리밍도 사용 가능합니다.-xslt "C:\xsl\stylesheet.xsl"을 사용하면 모든 입력 XML에 즉시 XSLT를 적용합니다. 그런 다음 출력은 -c로 선택한 형식으로 작성됩니다. 이렇게 하면 두 단계 파이프라인(XSLT 프로세서 + 변환기)이 단일 바이너리 호출로 통합됩니다. 우리는 인보이스 형식, EDI 변환, 스키마 매핑 워크플로에서 이 기능을 사용합니다.-msuccess "C:\done"은 변환에 성공한 파일을 done 폴더로 이동시키고, -merror "C:\quarantine"은 실패한 파일을 격리 폴더로 라우팅하며, -IgnoreInvalidSource는 잘못된 파일 하나로 인해 전체 배치가 중단되는 것을 방지합니다. -list 큐 파일 입력 및 -log -verbosity detail과 결합하면 이 바이너리는 워처 기반 백엔드 파이프라인에 깔끔하게 들어맞습니다..md를 대상으로 하면 변환기가 XML의 요소 계층을 Markdown 헤딩으로 작성합니다: 루트가 #, 자식 요소가 깊이에 따라 ##/###/####이 되며, 속성은 각 헤딩 아래에 key-value 목록으로 나타납니다. 동일한 태그와 동일한 자식 형태를 가진 반복 형제 요소는 자동 감지되어 XML-to-XLSX에 사용되는 동일한 렌더링 방식을 통해 타입이 지정된 열이 있는 GFM 표로 렌더링됩니다. YAML frontmatter 블록은 source_file, root_element, namespaces, element_count, 감지된 스키마(XSD/DTD가 참조된 경우), 그리고 바이너리 해시를 담습니다. 이는 CoolUtils RAG Adapter의 일부입니다 — 동일한 Markdown 계약을 모든 Total Converter X 제품이 공유합니다.binary_hash, 그리고 chunks_hint 배열. 명령줄에서 -Docling으로 활성화합니다.-cMD -Docling과 함께 -xslt "C:\xsl\reshape.xsl"을 전달하면 XSLT가 모든 입력에 즉시 적용된 다음 결과가 Markdown으로 작성됩니다. 이렇게 하면 두 단계 파이프라인(XSLT 프로세서 + 변환기)이 단일 바이너리 호출로 통합됩니다 — 특정 정규화된 형태로 RAG 인덱스에 도달해야 하는 EDI 변환, 인보이스 형식, 스키마 매핑 워크플로에 유용합니다..md 파일은 YAML frontmatter 블록이 있는 일반 GFM이므로 LangChain의 UnstructuredMarkdownLoader, LlamaIndex의 MarkdownReader, Haystack의 MarkdownToDocument, Claude Code의 MCP 파일 도구가 직접 읽습니다. 요소 XPath가 사이드카에 기록되어 있으므로 모델 답변의 인용이 정확한 소스 요소로 되돌아갈 수 있습니다. Claude, ChatGPT 또는 채팅 UI에서는 Markdown을 그대로 컨텍스트에 붙여넣을 수 있습니다.무료 평가판을 다운로드하고 몇 분 만에 파일을 변환하세요.
신용카드나 이메일이 필요하지 않습니다.