我有一个关于如何使用XSD Schema验证XML格式的问题。
我已经成功编程以使用XSD架构验证XML格式。但是,我需要将xx.xsd放在当前项目的主要位置。无论如何都要将xsd架构嵌入到程序集中,这样我就不需要总是将xxx.xsd放到可执行程序集的相同位置。我试图将它嵌入到项目的资源中,但是在使用VS命令提示符(例如resgen xxx.xsd)时,我似乎无法重新生成XSD文件。它说这个命令不支持扩展。
有没有其他方法可以解决这个问题。
任何建议都表示赞赏。
答案 0 :(得分:3)
如果你只处理一个XSD(没有外部参考),那么@Romil的回答就是你所需要的。但是,如果您使用组件化的XSD(通过xsd链接的XSD集:include / import / redefine),那么该解决方案将不起作用。 This post on SO向您展示如何正确解决它;您需要构建和使用自己的解析器,这将能够从嵌入式资源中提供这些引用,并且非常重要的是,您需要提供基本URI(通常是使用某些专有方案组成的URL)创建第一个读者。
答案 1 :(得分:2)
第1步:将XSD添加到您的类库项目中,就像通常那样
步骤2:右键单击XSD文件上的à属性,然后在Build Action下,选择“Embedded Resource”
步骤3:修改代码,如
所示XmlSchemaSet schemaSet = new XmlSchemaSet() ;
schemaSet.Add("", XmlReader.Create(xmlSchema));
到
TextReader schemaStream =
new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream(xmlSchema));
XmlSchemaSet schemaSet = new XmlSchemaSet() ;
schemaSet.Add("",XmlReader.Create(schemaStream));