在XSLT转换期间对XSD进行XML验证

时间:2011-09-06 10:34:35

标签: c# xml xslt

我有这个简单的代码用xslt转换xml文件

XslCompiledTransform transform = new XslCompiledTransform(true);
transform.Load("XSLTFile1.xslt", new XsltSettings(true, true), null);
XmlReader input = XmlReader.Create("XMLFile1.xml");
XmlWriter output = XmlWriter.Create("Result.xml", transform.OutputSettings);
transform.Transform(input, null, output);

如何在 xslt转换期间在XSD 上验证输出xml文件?例如:如果xslt尝试制作另一个明确的标签(具有相同的名称)并且XSD不允许它 - xslt transformator将不会这样做(或生成异常)

3 个答案:

答案 0 :(得分:2)

您可以根据需要执行XSLT转换,然后使用 Validation Event Handling 验证输出文档。

答案 1 :(得分:2)

XSLT 1.0不支持架构。没有兼容的XSLT 1.0处理器可以用于指定所需输出的架构和验证输出。因此,XSLT程序员只能在转换后的第二步执行验证。

XSLT 2.0指定了模式感知(SA)XSLT 2.0处理器的功能,它允许这一点。 SA还可以验证参数类型,变量,中间(临时)树和使用document()函数获得的文档。

一些着名的XSLT 2.0 SA处理器是Saxon 9.x,XQSharp和AltovaXML。至少还有另外两个--IBM(WebSphere的一部分)和Intel的。

答案 2 :(得分:1)

Saxon有一个Schema Aware处理器,但我认为你必须支付许可费。

或者你可以只验证XSLT的输出。