从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之前提供架构信息。

我做错了什么?

从xml模式生成CS类

您需要在创建阅读器时应用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