从xml模式生成CS类
本文关键字:CS xml 模式 | 更新日期: 2023-09-27 18:14:29
我确实使用xsd.exe (VS 2010命令提示符)生成了c#类表单骗局,但是当我将类序列化为xml文件时,在输出文件中我没有schema条目。
序列化的xml:
<?xml version="1.0" encoding="utf-16"?>
<Dokumenty xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" idSystemuLokalnego="ASD" dataUtworzenia="0001-01-01T00:00:00">
<Wniosek>
<Beneficjent />
</Wniosek>
当我尝试使用代码验证模式时:
//Serilalize xml to string
StringWriter sw = new StringWriter();
XmlTextWriter xw = new XmlTextWriter(sw);
x.Serialize(xw, doc);
String xml = sw.ToString();
StringReader sr = new StringReader(xml);
XmlTextReader xtr = new XmlTextReader(sr);
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("", "schemas''SimWniosekApl_v2.0.xsd");
settings.ValidationType = ValidationType.Schema;
//XmlReader reader = XmlReader.Create(xtr);
XmlDocument document = new XmlDocument();
document.Load(xtr);
ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationHandler);
// the following call to Validate succeeds.
document.Validate(eventHandler);
它异常失败:附加信息:文档上的XmlSchemaSet要么为空,要么没有模式。在调用Validate之前提供架构信息。
我做错了什么?
您需要在创建阅读器时应用XmlReaderSettings。
该代码对设置没有任何作用。在创建设置之前,已经创建了读取器。代码只是创建设置,然后忘记它们。
StringReader sr = new StringReader(xml);
//XmlTextReader xtr = new XmlTextReader(sr);
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("", "schemas''SimWniosekApl_v2.0.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader reader = XmlReader.Create(xtr,settings);
XmlDocument document = new XmlDocument();
document.Load(reader);
ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationHandler);
document.Validate(eventHandler);
这里有一个完整的例子:
http://msdn.microsoft.com/en-us/library/ms162371.aspx