从xml架构生成CS类

时间:2011-11-11 11:03:11

标签: c# xml

我使用xsd.exe(VS 2010命令提示符)生成了C#类表单scham, 但是当我将类序列化为xml文件时,在out文件中我没有架构条目。

序列化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为null或其中没有架构。在调用Validate之前提供架构信息。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

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