这是一个普遍的问题,我还没有任何XSLT。
是否有可能开发一个XSLT,让Schema验证输入文件(XML),如果XML中有任何验证错误,那么我们可以将那些XML文件作为输出吗?
我的要求是:首先我要验证输入XML,如果XML有任何错误,那么我想抓住它们然后想要以适当的格式显示它们(更具描述性,通过生成验证报告)。
请在XSLT中建议是否有任何方法。
答案 0 :(得分:0)
架构感知XSLT 2.0(或3.0)处理器可以使用xsl:import-schema
(https://www.w3.org/TR/xslt20/#import-schema)导入W3C XSD架构,然后您可以将match="document-node(schema-element(someRootElementName))"
形式的匹配模式写入仅匹配有效的输入文档,如果您编写第二个匹配未经验证的文档节点的模板,例如match="document-node()"
然后您可以确定输入是否无效并输出错误消息,请参阅http://www.ibm.com/developerworks/library/x-schemaxslt/#validin。
但是,我不认为XSLT使用这种方式是创建带有验证错误的详细报告的好方法,因为我不知道如何识别验证问题,您最好检查API验证XML解析器有关如何访问报告的错误消息的信息。
答案 1 :(得分:0)
没有标准/可互操作的XSLT解决方案,但是Saxon-EE提供了saxon:validate()扩展函数,它完全符合您的要求(除了结果是XSLT 3.0映射的形式)而不是XML)。
详细信息:http://www.saxonica.com/documentation/index.html#!functions/saxon/validate
Saxon-EE的最新版本还有一个InvalidityHandler
回调接口,您可以实现它来捕获验证错误的详细信息,并且有一个名为InvalidityReportGenerator
的实现,它会生成验证错误的XML报告。您可以轻松编写XSLT以将此报告转换为其他格式。
答案 2 :(得分:0)
您可以尝试使用基于XML的SVRL格式生成报告的ISO Schematron验证器:http://www.schematron.com/validators.html。
如果您还没有XML Schema文件,那么我建议创建一个Schematron验证文件(* .sch)来描述目标格式而不是XML Schema文件。如果您需要使用现有的XML Schema文件,那么可以使用“XSD to Schematron converter”对其进行转换:http://www.schematron.com/resources.html