xsd如何报告错误

时间:2013-10-22 12:24:02

标签: xml xsd

我在Visual Studio中使用XSD,但结果并不像预期的那样。

我对一个元素有一个独特的约束。当我故意通过引入重复来破坏Xml时,intellisense突出显示错误,但是当它然后让我编译并运行代码时,没有任何进一步发生并且错误被允许级联通过。

是否有可能我错过了任何事情或者我做错了什么,或者就像在XSD中错误验证一样?

    public static T CreateClassFromXml<T>(string path, string root, XmlReaderSettings settings)
        where T : class
    {
        path.ThrowNullOrEmpty("path");
        settings.ThrowNull("settings");

        File.Exists(path).ThrowFalse(string.Format("'{0}' could not be found", path));

        var serializer = new XmlSerializer(typeof(T), new XmlRootAttribute() { ElementName = root });

        using (var reader = XmlReader.Create(path, settings))
        {
            return (T)serializer.Deserialize(reader);
        }
    }

致电代码:

        var xsd = context.Server.MapPath(Paths.Xml + "Wikis.xsd");
        File.Exists(xsd).ThrowFalse(string.Format("'{0}' could not be found", xsd));

        var settings = new XmlReaderSettings();
        settings.Schemas.Add(null, xsd);
        settings.ValidationType = ValidationType.Schema;

        var xml = context.Server.MapPath(Paths.Xml + "Wikis.xml");
        var metaList = XmlHelper.CreateClassFromXml<List<WikiMeta>>(xml, "AllMeta", settings);

1 个答案:

答案 0 :(得分:0)

这完全取决于您期望Visual Studio对XML文件做什么。您需要发布更多详细信息,从VS的版本开始,然后在您将XML文件作为项目的一部分单击时查看属性;例如,什么是构建行动?你有自定义工具吗?什么是自定义工具?如果您只是想确保XML文件在项目中发布有效,那么您要么依赖于进行验证的自定义工具,要么可以使用构建事件等。

这是一个可用于在构建过程中构建自定义验证的示例。设置工具路径并通过某种机制传递参数...参数可以是您要验证的实际文件,也可以包含文件位置列表和关联的XSD位置...除零以外的任何退出代码都将被视为错误(因此您的构建可能会停止)。将此XML添加为项目文件的一部分,或在项目属性编辑器中使用适当的UI。

<PropertyGroup>
    <Tool Condition="'$(Tool)' == ''">"full path to your exe"</Tool>
    <ToolParams>"$(ProjectDir)$(TargetName).xml"</ToolParams>
</PropertyGroup>
<Target Name="AfterCompile">
    <Exec Condition=" '$(RunTool)' == 'true' " Command="$(Tool) /parms:$(ToolParms)"/>
</Target>