¿Cuál es su forma de depurar las excepciones relacionadas con xml?

11

Estoy codificando con Magento 2 en gvim y soy nuevo en Magento 2.

Hubo muchas veces que tuve problemas para depurar errores relacionados con xml, bueno, cada vez con solo suerte. Pero situaciones como esta me molestan mucho: no sabes dónde está el archivo que está causando este error, y el depurador tampoco lo dice.

Tome lo siguiente, obtengo esto: un archivo xml no es válido. De hecho, he creado un módulo que tiene module.xml, routes.xml, config.xml, {layout} .xml, di.xml debajo de él, etc. o view / layout dirs. ¿Qué línea de archivo 12/89 / .. no es válida? el generado / fusionado? Estoy perdido porque no encuentro nada en var / generado, y la línea de comandos deja de funcionar. ¿Cuál es la forma de depuración para encontrar cuál es este error?

Cualquier ayuda es apreciada.

Error grave: Magento no detectado \ Framework \ Exception \ LocalizedException: Elemento de documento no válido 'elemento': la definición del tipo es abstracta. Línea: 12 Elemento 'elemento', atributo 'nombre': El XPath '@name' de un campo de restricción de identidad clave 'itemName' se evalúa como un conjunto de nodos con más de un miembro. Línea: 89 Elemento 'elemento': no ​​todos los campos de restricción de identidad clave 'elementoNombre' se evalúan en un nodo. Línea: 89 Elemento 'elemento', atributo 'nombre': El XPath '@name' de un campo de restricción de identidad clave 'itemName' se evalúa como un conjunto de nodos con más de un miembro. Línea: 90 Elemento 'elemento': no ​​todos los campos de restricción de identidad clave 'elementoNombre' se evalúan en un nodo. Línea: 90 en /var/www/html/lib/internal/Magento/Framework/Config/Reader/Filesystem.php:

robertshare
fuente
2
Golpeando mi cabeza contra la pared ...
tjons
la forma de "depurar" esos realmente es usar los xsd proporcionados (también esto significa usar phpstorm) o simplemente prueba y error. Tal vez podría escribir un guión de comprobación de xsd propio
David Verholen

Respuestas:

4

La excepción lanzada te dice que estás usando un elemento <item />donde no puedes usar uno. Entonces, sí, su problema probablemente esté relacionado con XML.

Lo primero que hago para asegurarme de escribir un XML válido es configurar mi IDE para que pueda asignar correctamente los esquemas XSD. En PhpStorm puedes hacer esto usando el elemento auxiliar que queda en el xsiespacio de nombres:

establecer espacio de nombres en PhpStorm

Cuando todo esté configurado correctamente, su IDE configurará la finalización del código por usted y le advertirá si está haciendo algo que no está permitido:

información sobre herramientas 1

información sobre herramientas 2

Espero que esto te ayude un poco.

Giel Berkers
fuente
Gracias. Leí la introducción sobre el soporte de xsd en devdocs que dice que en este momento solo se admite phpstorm (debido a su estilo de espacio de nombres único). Debido a que phpstorm consume demasiada memoria en mi escritorio de fedora, decido usar gvim, a lo que estoy acostumbrado. Aunque actualizo a vim 8, el xml xsd todavía no es compatible con mage2 '.
robertshare
2
se usa bin/magento dev:urn:generate .idea/misc.xmlpara generar mapeo xsd para PHPStorm. Podrá resolver todas las rutas de urna desde xmls.
Sergii Ivashchenko