【问题标题】:Why does .NET schema validation claim that the namespace:lang attribute is not declared?为什么 .NET 架构验证声称未声明 namespace:lang 属性?
【发布时间】:2012-01-05 13:10:04
【问题描述】:

我尝试根据此集合中名为 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。

更新

我根据 cmets 尝试了 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>

【问题讨论】:

标签: .net validation c#-3.0 xsd


【解决方案1】:

刚刚处理了几天相同的问题,我发现将架构添加到 SchemaSet 会直接引发问题。因此,您必须使用 XmlReaderDtdProcessing = Ignore 设置添加该架构。

此外,如果您提供与验证相关的代码,则更容易提供准确的答案。

顺便check这个答案也:

【讨论】:

    猜你喜欢
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    相关资源
    最近更新 更多