Estoy trabajando con varios objetos XElement
para proporcionar algunos datos especificados por el usuario para varios objetos en mi biblioteca. Estoy tratando de evitar especificar la estructura de todo el archivo XML porque a la biblioteca no le debe importar cómo se ve el XML completo, siempre y cuando los elementos específicos que necesita estén estructurados correctamente.Validación de esquema XML de XElement
Para este fin, tengo 3 archivos separados XSD
que definen el esquema para cada una de las 3 XElements
necesidades de mi clase, sin embargo, tengo algunos problemas para validar el XElement con el esquema. No parece haber un método para hacerlo sin una solución alternativa.
Desde la página MSDN, el método de extensión XElement.Validate()
parece estar orientado a la validación de los subelementos de un archivo más grande. El argumento XmlSchemaObject
está causando mis problemas ya que no puedo suponer que estará presente en ninguno de los XElements
. Creo que puedo evitar este problema al tomar el XmlSchemaElement
de mi XmlSchemaSet
para pasarlo como el argumento XmlSchemaObject
, pero como el XmlSchemaSet
ya define todo, parece extraño tener que hacer eso.
¿Existe una mejor opción para validar un XElement
con un esquema sin validar primero el XDocument
completo?
¿O debería dejar que la capa empresarial maneje la validación del esquema en la aplicación y dejar que la biblioteca asuma que el XElement
está formado correctamente (consideré esta opción, pero como preferencia personal prefiero evitar lanzar excepciones y prefiero simplemente dejar el método de llamada sabe que el XElement
no es válido a través de un parámetro de retorno).
No tengo idea de por qué no pensé en incluir el código en mi propio método de extensión 'XElement.Validate()'. Parece tan lógico ahora que lo dices. Crear una 'XDocument' es otra buena idea que debería haber ocurrido también a mí (pasé demasiado tiempo tratando de descubrir cómo convertirla, y me perdí la solución obvia). Voy a experimentar con ambos y ver cuál prefiero. – psubsee2003