我尝试针对XSD验证XML。我发现了几种方法。这两个可以很好地编写所有错误,所以每个错误的用途是什么?
XmlDocument和XmlSchema类
XmlDocument document = new XmlDocument();
document.Load(xmlFilePath);
document.Schemas.Add(@namespace,schemaFilePath);
document.Validate(ValidationHandler);
-----
public void ValidationHandler(object sender, ValidationEventArgs e)
{
Console.WriteLine(e.Message);
}
XmlReaderSettings类
在这里,我可以进行一些设置,并且在执行Load()时就会进行验证。
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationEventHandler += new ValidationEventHandler(ValidationHandler);
settings.Schemas.Add(@namespace, schemaFilePath));
settings.ValidationType = ValidationType.Schema;
XmlReader reader = XmlReader.Create(xmlFilePath, settings);
document.Load(reader);
reader.Close();
-----
public void ValidationHandler(object sender, ValidationEventArgs e)
{
Console.WriteLine(e.Message);
}
答案 0 :(得分:2)
区别在XmlReader
和XmlDocument
类之间。 XmlReader
流式传输XML并一次读取一个节点。另一方面,XmlDocument
将整个XML读入内存并使用它。因此,通常XmlDocument
更容易使用,但不适合大文件。
就验证而言,似乎类是可比较的,因此要么选择更容易使用的类(可能是XmlDocument
),要么选择XmlReader
如果您期望大文件或如果低内存消耗很重要。
另外,要使用XmlReader
进行验证,您不需要像XmlDocument.Load()
那样使用while (reader.Read()) { }
就足够了。