问题描述
我有两个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 (将#修改为@)