如何解决使用Schematron验证UBL-XML
我有两个XML文件,好的和坏的。我需要使用XML Schematron文件来验证它们。我被要求验证的Schematron文件是带有SCH标签的XML。我可以借助Oxygen XML将这个XML文件转换为XSL文件,但是我认为有不同的XSLS,分别称为iso XSL和SVRL XSL。
我应该怎么做?
验证方法:
public static ValidationResult SchematronValidateXml(List<XmlDocument> xmlList)
{
var result = new ValidationResult();
foreach (var document in xmlList)
{
XmlTextReader reader = new XmlTextReader(new StringReader(document.OuterXml));
var resultStream = XslTransformer.Transform(reader);
using (var xmlReader = XmlReader.Create(resultStream))
{
bool hasError = xmlReader.ReadToFollowing("svrl:text");
while (hasError)
{
string id = "";
var elementId = (XmlElement)document.GetElementsByTagName("cbc:ID")[0];
if (elementId != null)
id = elementId.InnerText;
result.ErrorMessageList.Add("Schematron (" + id + ") :" + xmlReader.ReadElementContentAsstring());
hasError = xmlReader.ReadToFollowing("svrl:text");
}
}
}
result.IsValid = !result.ErrorMessageList.Any();
return result;
}
变压器方法:
public static Stream Transform(XmlTextReader xmlTextReader)
{
try
{
var processor = new Processor();
var input = processor.NewDocumentBuilder().Build(xmlTextReader);
var compiler = processor.NewXsltCompiler();
var xslTextReader = new XmlTextReader(@"C:\Tools\Schematron\Schematron.xsl");
var transformer = compiler.Compile(xslTextReader).Load();
transformer.InitialContextNode = input;
var resultStream = new MemoryStream();
var serializer = processor.NewSerializer(resultStream);
transformer.Run(serializer);
resultStream.Position = 0;
return resultStream;
}
catch (Exception ex)
{
throw;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。