Tengo archivos xml que leí en el tiempo de ejecución, ¿es posible validar el xml contra un archivo xsd en tiempo de ejecución? usando C#¿Es posible validar xml contra xsd usando código en tiempo de ejecución?
Respuesta
Prueba esto:
public void ValidateXmlDocument(
XmlReader documentToValidate, string schemaPath)
{
XmlSchema schema;
using (var schemaReader = XmlReader.Create(schemaPath))
{
schema = XmlSchema.Read(schemaReader, ValidationEventHandler);
}
var schemas = new XmlSchemaSet();
schemas.Add(schema);
var settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas = schemas;
settings.ValidationFlags =
XmlSchemaValidationFlags.ProcessIdentityConstraints |
XmlSchemaValidationFlags.ReportValidationWarnings;
settings.ValidationEventHandler += ValidationEventHandler;
using (var validationReader = XmlReader.Create(documentToValidate, settings))
{
while (validationReader.Read())
{
}
}
}
private static void ValidationEventHandler(
object sender, ValidationEventArgs args)
{
if (args.Severity == XmlSeverityType.Error)
{
throw args.Exception;
}
Debug.WriteLine(args.Message);
}
Esperanza ayuda a este enlace:
El enlace se ve decente, pero me di cuenta el ejemplo es utilizar un XmlValidatingReader, que es obsoleto. Eche un vistazo al stock XmlReader y XmlReaderSettings que contiene algunas propiedades de Validación para definir el comportamiento. – STW
I GOT CÓDIGO DEMASIADO! Yo uso esta en mis pruebas:
public static bool IsValid(XElement element, params string[] schemas)
{
XmlSchemaSet xsd = new XmlSchemaSet();
XmlReader xr = null;
foreach (string s in schemas)
{ // eh, leak 'em.
xr = XmlReader.Create(
new MemoryStream(Encoding.Default.GetBytes(s)));
xsd.Add(null, xr);
}
XDocument doc = new XDocument(element);
var errored = false;
doc.Validate(xsd, (o, e) => errored = true);
if (errored)
return false;
// If this doesn't fail, there's an issue with the XSD.
XNamespace xn = XNamespace.Get(
element.GetDefaultNamespace().NamespaceName);
XElement fail = new XElement(xn + "omgwtflolj/k");
fail.SetAttributeValue("xmlns", xn.NamespaceName);
doc = new XDocument(fail);
var fired = false;
doc.Validate(xsd, (o, e) => fired = true);
return fired;
}
este se lleva en los esquemas como cadenas (recursos de archivos dentro del conjunto) y los añade a un conjunto de esquemas. Valido y si no es válido, devuelvo falso.
Si no se encuentra el xml no válido, hago una comprobación negativa para asegurarme de que mis esquemas no se dañen. No está garantizado a toda prueba, pero lo he usado para encontrar errores en mis esquemas.
Puede intentar usar el método 'XmlSchema.Read', ya que puede validar el esquema al analizarlo. –
gracias por el código :) – BigOmar
solución más simple ..
try
{
XmlReaderSettings Xsettings = new XmlReaderSettings();
Xsettings.Schemas.Add(null, "personDivideSchema.xsd");
Xsettings.ValidationType = ValidationType.Schema;
XmlDocument document = new XmlDocument();
document.Load("person.xml");
XmlReader reader = XmlReader.Create(new StringReader(document.InnerXml), Xsettings);
while (reader.Read());
}
catch (Exception e)
{
Console.WriteLine(e.Message.ToString());
}
- 1. Validar xml creado usando jaxb contra un archivo xsd
- 2. Error al validar XML contra XSD
- 3. Validar XML contra el software XSD
- 4. ¿Cómo validar xml contra xsd y obtener errores * ALL *?
- 5. Validar XML usando múltiples XSD en Ruby
- 6. Validar XML contra XSD en un único método
- 7. Validar XML con XSD
- 8. puede validar xsd contra xml en vs 2010?
- 9. Validar un xml contra xsd con JS/jQuery
- 10. La forma más eficaz de validar XML contra XSD
- 11. realizando validación xml contra xsd
- 12. ¿Cómo validar big xml contra el esquema xsd?
- 13. Validar un esquema XSD usando XSD
- 14. Cómo obtener errores más específicos al validar XML contra un XSD usando java.xml.validator
- 15. Usando .NET para validar XML contra un esquema
- 16. ¿Es posible depurar código compilado en tiempo de ejecución?
- 17. suministrados al validar XML con XSD
- 18. ¿Cómo validar un archivo xml contra un esquema XSD utilizando la biblioteca de Amara en Python?
- 19. Ignorar el orden de los elementos al validar XML contra XSD
- 20. Validar un XML contra un XSD en Java/Obtener un control del schemaLocation
- 21. Validar XML contra XSD e ignorar el orden de los elementos secundarios
- 22. ¿Validar un esquema XSD?
- 23. ¿Puedo validar una expresión XPath contra un esquema XML?
- 24. ¿Cómo puedo validar XML con XSD en Perl?
- 25. ¿Cómo uso PowerShell para validar archivos XML en un XSD?
- 26. Usando xsd para generar XML en .net
- 27. nodejs: ¿Es posible evaluar el código js usando runInNewContext y limitar su tiempo de ejecución por un tiempo de espera?
- 28. Cómo validar xml contra un archivo DTD en Python
- 29. Parse XML usando un XSD en PHP
- 30. Validar mensaje SOAP contra WSDL
este es el más rápido que he usado. –