veces, al validar ciertos documentos XML utilizando un XmlValidatingReader, recibo el siguiente error:"El atributo 'http://www.w3.org/XML/1998/namespace:lang' no está declarado."
System.Xml.Schema.XmlSchemaValidationException:
"The 'http://www.w3.org/XML/1998/namespace:lang' attribute is not declared."
El mismo documento a veces tiene éxito. No puedo entender por qué.
Mi XSD importa el esquema de este modo:
<xs:schema id="myschemaId"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://mytargetnamespace.com"
xmlns="http://mytargetnamespace.com"
xmlns:mm="http://mytargetnamespace.com"
elementFormDefault="qualified">
<xs:import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2001/xml.xsd" />
...
Y en el documento XML que tengo los siguientes atributos:
<root xmlns="http://mytargetnamespace.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://mytargetnamespace.com myschema.xsd">
Por último, los XmlReaderSettings:
const XmlSchemaValidationFlags validationFlags =
XmlSchemaValidationFlags.ProcessInlineSchema |
XmlSchemaValidationFlags.ProcessSchemaLocation |
XmlSchemaValidationFlags.ReportValidationWarnings |
XmlSchemaValidationFlags.AllowXmlAttributes;
// Set the validation settings.
var settings = new XmlReaderSettings
{
ValidationType = ValidationType.Schema,
ValidationFlags = validationFlags,
DtdProcessing = DtdProcessing.Parse
};
settings.ValidationEventHandler += OnValidationEventHandler;
// Create the XmlReader object.
var reader = XmlReader.Create(_xmlFilePath, settings);
// Parse the file.
while (reader.Read()) {}
Este es un exe independiente ejecutando .NET 4.0 en Windows 2003.
Me he dado cuenta de que hay una pausa importante cuando intenta validar. ¿Podría eso estar relacionado? ¿Está intentando descargar el esquema "xml.xsd" real y no está teniendo éxito?
Te estoy dando la respuesta ya que la cadena de herramientas de mi cliente requiere que schemaLocation esté presente. Gracias, ¡pensé que me estaba volviendo loco! – roufamatic