Validación XML con XSD en Visual Studio IDE


Sé que he hecho esto antes, pero no está funcionando hoy, ni puedo encontrar ningún lugar que explique cómo hacerlo. Podría ser mi falta de sueño, pero sospecho que Gremlins.

Tengo un documento XML y un directorio lleno de XSD que lo definen. ¿Cómo configuro el IDE Visual para que me notifique de errores de validación y, a continuación, proporcione una lista intellisense de etiquetas y atributos válidos en un contexto determinado?

Lo que he intentado:

  • He añadido los XSD al proyecto con el documento XML.
  • He añadido los XSD a la lista de Esquemas XML (en XML / Schemas)... elemento de menú.)
  • Incluso he incluido los atributos schemaLocation y noNamespaceSchemaLocation en el documento XML.

Visual Studio todavía no está renunciando a ninguna información útil de depuración o edición. Probé tanto 2010 y 2008 (lo he hecho antes en 2008 pensé)

Actualización: Tuve otro desarrollador probar esto y falló para él también. Él sabe que lo ha hecho con otros documentos XML y lo ha hecho funcionar. Luego descargué Oxygen XML editor y funcionó bien en los mismos archivos XML y XSD, por lo que los archivos parecen estar bien (o el oxígeno es más indulgente / flexible . . . )

Author: Jim McKeeth, 2010-07-01

5 answers

Jim,

Debe asociar el documento XML en Visual Studio con el archivo XSD que tiene ; debería ver algo como esto en la ventana de Propiedades del documento XML:

texto alt

Espejo 1

En el editor de conjuntos de esquemas XML (se abre al hacer clic en (...) puntos suspensivos en el cuadro de texto" Esquemas " en su ventana de propiedades) debe asegurarse de tener su esquema presente. Además, asegúrese de que la columna Use para ese esquema esté habilitada ; si no, haga clic en ella - obtendrá una lista desplegable de opciones, elija la Use con la marca de verificación verde:

texto alt

Espejo 1

Asegúrese de que la ventana de la Lista de errores de Visual Studio esté visible (Vista de menú > Lista de errores). Esto mostrará todas las inconsistencias entre las definiciones de esquema XML y XSD.

Una vez que todo esto está en su lugar, el editor XML de Visual Studio debe resaltar los problemas con su XML en el editor usando garabatos azules:

texto alt

Espejo 1

 119
Author: marc_s,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-27 14:46:37

No es necesario asociar manualmente los archivos en Visual Studio: coincidirá automáticamente un archivo XML con un archivo XSD si los tiene abiertos y tiene su espacio de nombres definido correctamente.

Para definir el espacio de nombres:

En el elemento raíz del archivo XML:

<Data xmlns='http://yourdomain.com/yourschema.xsd'>
    ...
</Data>

En el elemento schema del archivo XSD:

<xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://yourdomain.com/yourschema.xsd"
    xmlns:this="http://yourdomain.com/yourschema.xsd"
    elementFormDefault="qualified">
    ...
</xs:schema>

Una nota sobre el uso de tipos en su esquema cuando tiene un targetNamespace

Porque usted está especificando un targetNamespace en su esquema, cualquier referencia a los tipos definidos en el esquema tendrá que ir precedida de un espacio de nombres (por lo que hemos añadido el atributo xmlns:this en el elemento anterior <xs:schema />).

<!-- Define the type as normal -->
<xs:complexType name="Row">
    <xs:sequence>
        <xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1" />
        <xs:element name="Value" type="xs:float" minOccurs="1" maxOccurs="1" />
    </xs:sequence>
</xs:complexType>
<!-- Use the type (note the "this:" prefix) -->
<xs:element name="Row" type="this:Row" minOccurs="0" maxOccurs="unbounded" />
 31
Author: Ross McNab,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-06 08:01:10

Otro punto de falla aquí es Windows 7 "bloqueo" archivos de esquema... haga clic derecho en el archivo xsd en el disco, Propiedades > General y si está bloqueado, tendrá un botón "Desbloquear". Esto estaba causando que mi validación XML fallara en VS2012.

 2
Author: EJA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-24 12:44:18

¿Su xsd contiene un atributo "targetNamespace" /schema/@targetNamespace que sea similar al espacio de nombres al que hace referencia en el xml?

Ejemplo:

Xsd:

Xml: ...

Véase también XML/XSD intellisense no funciona en Visual Studio 2010

 1
Author: k3b,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:30:43

Tuve este mismo problema, pero VS ya estaba haciendo referencia a mi esquema correctamente. Resulta que el archivo que estaba tratando de validar no tenía una extensión de archivo' xml'. Añadir .xml al final de mi nombre de archivo, y la validación comenzó a funcionar.

 0
Author: John Livermore,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-28 20:15:32