Почему проверка схемы .NET утверждает, что атрибут namespace: lang не объявлен? - PullRequest
1 голос
/ 05 января 2012

Я пытаюсь проверить документ XML по схеме с именем MedisinskeOpplysninger-v1.5.xsd из этой коллекции: http://www.kith.no/upload/1611/v1.5/PLO-schema%20v1.5.zip

По сути, я добавляю ссылочные схемы в SchemaSet в C # и проверяю моиXML, назначив SchemaSet соответствующему свойству XmlReaderSettings и запустите XmlReader.

Я получаю следующее сообщение об ошибке:

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 пытается загрузить xml.xsd с w3c.org, но не удается (сервер отвечает 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.

Обновление

Я попробовал предложение Яназа комментарии, и добавил пользовательский преобразователь из 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 голосов
/ 13 января 2018

Только что занимался той же проблемой в течение пары дней, и я обнаружил, что добавление схемы в SchemaSet напрямую порождает проблему.Таким образом, вы должны добавить эту схему, используя XmlReader и DtdProcessing = Ignore урегулирования.

Также, если вы предоставите свой код, связанный с проверкой, будет проще дать точный ответ.

Кстати отметьте этот ответ также:

...