为什么.NET模式验证声明未声明namespace:lang属性?

时间:2012-01-05 13:10:05

标签: .net validation c#-3.0 xsd

我尝试根据此集合中名为MedisinskeOpplysninger-v1.5.xsd的模式验证XML文档:http://www.kith.no/upload/1611/v1.5/PLO-schema%20v1.5.zip

基本上,我将引用的模式添加到C#中的SchemaSet中,并通过将SchemaSet分配给XmlReaderSettings的相应属性并运行XmlReader来验证我的XML。

我收到以下错误消息:

System.Xml.Schema.XmlSchemaException : The 'http://www.w3.org/XML/1998/namespace:lang' attribute is not declared.
    at System.Xml.Schema.XmlSchemaSet.InternalValidationCallback(Object sender, ValidationEventArgs e)
    at System.Xml.Schema.BaseProcessor.SendValidationEvent(XmlSchemaException e, XmlSeverityType severity)
    at System.Xml.Schema.BaseProcessor.SendValidationEvent(XmlSchemaException e)
    at System.Xml.Schema.Compiler.CompileElement(XmlSchemaElement xe)
    at System.Xml.Schema.Compiler.Compile()
    at System.Xml.Schema.Compiler.Execute(XmlSchemaSet schemaSet, SchemaInfo schemaCompiledInfo)
    at System.Xml.Schema.XmlSchemaSet.Compile()

我在Fiddler中看到.NET正在尝试从w3c.org下载xml.xsd,但是失败了(服务器以504响应),所以我尝试下载xml.xsd并将其显式包含在我的SchemaSet中。当我尝试这个时,.NET声称

The global attribute 'http://www.w3.org/XML/1998/namespace:lang' has already been declared. 

我很困惑。有什么想法吗?

我使用的是.NET 3.5,C#,Visual Studio 2010,Windows 7。

更新

我根据评论尝试了Ian的建议,并添加了来自LonData的自定义解析器。通过观察Fiddler跟踪它确实有效,我可以看到,因为现在没有尝试从外部地址解析模式。

我现在收到以下错误消息:     未声明'http://www.w3.org/2000/09/xmldsig#:Signature'元素。

我的XML目录文件如下所示:

<catalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
   <systemSuffix systemIdSuffix="XMLSchema.xsd" uri="C:\Users\eax\AppData\Local\Temp\XMLSchema.xsd"/>
   <systemSuffix systemIdSuffix="datatypes.dtd" uri="C:\Users\eax\AppData\Local\Temp\datatypes.dtd"/>
   <systemSuffix systemIdSuffix="XMLSchema.dtd" uri="C:\Users\eax\AppData\Local\Temp\XMLSchema.dtd"/>
   <systemSuffix systemIdSuffix="Xmldsig.xsd" uri="C:\Users\eax\AppData\Local\Temp\Xmldsig.xsd"/>
   <systemSuffix systemIdSuffix="xmldsig-core-schema.xsd" uri="C:\Users\eax\AppData\Local\Temp\xmldsig-core-schema.xsd"/>
   <systemSuffix systemIdSuffix="xml.xsd" uri="C:\Users\eax\AppData\Local\Temp\xml.xsd"/>
   <systemSuffix systemIdSuffix="xhtml1-strict.xsd" uri="C:\Users\eax\AppData\Local\Temp\xhtml1-strict.xsd"/>
</catalog>

1 个答案:

答案 0 :(得分:0)

刚刚处理了同样的问题几天,我发现直接向SchemaSet添加模式会引发问题。因此,您必须使用dir > %%label_%% >>".txt"unsigned int a, b, c, e; float d; fscanf(file, "%3u%3u%2u%7f%2u", &a, &b, &c, &d, &e); printf("a=%u b=%u c=%u d=%f e=%u", a, b, c, d, e); 设置来添加该架构。

此外,如果您提供验证相关代码,则可以更轻松地提供准确答案。

顺便提一句check这个答案也是: