Eu tenho um arquivo XML com um local de esquema especificado, como este:
xsi:schemaLocation="someurl ..\localSchemaPath.xsd"
Eu quero validar em c #. O Visual Studio, quando abro o arquivo, o valida no esquema e lista os erros perfeitamente. De alguma forma, porém, não consigo validá-lo automaticamente em C # sem especificar o esquema a ser validado da seguinte forma:
XmlDocument asset = new XmlDocument();
XmlTextReader schemaReader = new XmlTextReader("relativeSchemaPath");
XmlSchema schema = XmlSchema.Read(schemaReader, SchemaValidationHandler);
asset.Schemas.Add(schema);
asset.Load(filename);
asset.Validate(DocumentValidationHandler);
Não devo validar com o esquema especificado no arquivo XML automaticamente? O que estou perdendo ?
Respostas:
Você precisa criar uma instância XmlReaderSettings e transmiti-la ao seu XmlReader quando a criar. Em seguida, você pode assinar o
ValidationEventHandler
nas configurações para receber erros de validação. Seu código terminará assim:fonte
using
cláusula para a integralidade :)settings.ValidationEventHandler += (o, args) => { errors = true; // More code };
Uma maneira mais simples, se você estiver usando o .NET 3.5, é usar
XDocument
eXmlSchemaSet
validar.Consulte a documentação do MSDN para obter mais assistência.
fonte
<catalog><![CDATA[my <i> new </i> catalog....]]></catalog>
é a maneira correta de fazer isso.O exemplo a seguir valida um arquivo XML e gera o erro ou aviso apropriado.
O exemplo anterior usa os seguintes arquivos de entrada.
books.xsd
fonte
Pessoalmente, sou a favor da validação sem retorno de chamada:
(consulte a publicação de Timiz0r em Validação de esquema XML síncrono? .NET 3.5 )
fonte
Eu fiz esse tipo de validação automática em VB e foi assim que fiz (convertido em C #):
Então, inscrevi-me no
settings.ValidationEventHandler
evento enquanto lia o arquivo.fonte