如何使用XmlPrime的xslt.exe命令行验证XML文档与XML Schema一致性?
解决方案:使用XmlPrime进行XML Schema验证
你之前遇到的问题核心是选错了工具:XmlPrime的xslt.exe是用于执行XSLT转换的工具,并非专门的XML Schema验证工具,因此单独使用--xsd和-v参数会报错(要求XSLT样式表)。正确的做法是使用XmlPrime自带的validate.exe工具完成Schema验证,具体步骤如下:
1. 基础XML Schema验证(使用validate.exe)
validate.exe是XmlPrime专门用于XML结构与Schema验证的工具,无需依赖XSLT样式表。针对你的目录结构(common存XSD,samples存发票XML),执行以下命令:
命令格式
# 基础验证,指定主XSD和目标XML validate.exe --xsd "common/UBL-Invoice-2.1.xsd" "samples/invoice.xml" # 若XSD存在依赖文件,指定XSD搜索目录 validate.exe --xsd "common/UBL-Invoice-2.1.xsd" --xsd-path "common" "samples/invoice.xml" # 输出详细验证日志 validate.exe --verbose --xsd "common/UBL-Invoice-2.1.xsd" --xsd-path "common" "samples/invoice.xml"
参数说明
--xsd:指定主Schema文件路径(这里是UBL-Invoice-2.1.xsd)--xsd-path:指定依赖Schema文件的搜索目录(解决XSD之间的引用问题)--verbose:输出详细的验证错误与警告信息- 最后一个参数是待验证的XML文件路径
2. 为什么xslt.exe无法单独做Schema验证?
xslt.exe的--xsd参数是在执行XSLT转换前,验证输入XML是否符合指定Schema,它的核心功能仍是执行转换,因此必须搭配XSLT样式表文件使用。如果仅需验证而无需转换,validate.exe才是正确的选择。
3. 补充:完成Schematron验证(结合XmlPrime工具链)
你的目标还包括Schematron规则验证,可通过XmlPrime的schematron.exe和xslt.exe配合完成:
步骤1:将Schematron文件转换为XSLT
Schematron验证本质是通过XSLT实现的,需先把.sch文件转换成可执行的XSLT:
schematron.exe "peppol_schematron/PEPPOL-EN16931-UBL.sch" -o "peppol_schematron/PEPPOL-EN16931-UBL.xsl"
步骤2:执行XSLT完成Schematron验证(可同时做Schema验证)
用xslt.exe执行生成的XSLT,同时通过--xsd参数附加Schema验证:
xslt.exe --xsd "common/UBL-Invoice-2.1.xsd" --xsd-path "common" "samples/invoice.xml" "peppol_schematron/PEPPOL-EN16931-UBL.xsl" -o "validation-results.xml"
执行后,validation-results.xml会包含Schema与Schematron的所有验证结果。
4. 工具评估补充
- XmlPrime:原生.NET工具,完美适配无Java的Windows环境,商业授权可直接联系官方获取报价,支持XSLT 2.0/3.0及Schematron全特性。
- Saxon:有.NET版本(Saxon-HE .NET免费,PE/EE收费),若预算有限可考虑,但需注意.NET环境依赖;商业版本功能与XmlPrime相近。
内容的提问来源于stack exchange,提问作者pepr
相关产品推荐
相关产品推荐

