如何找到“Element odoo has extra content: data”的根本原因

问题描述 投票:0回答:1

错误信息

“Element odoo 有额外内容:数据”

如果 xml 文件(例如视图)无法根据 RELAXNG 架构文件进行验证,则可能会生成

odoo/odoo/import_xml.rng

。不幸的是它不是很具体。例如这个文件:

<?xml version="1.0" encoding="utf-8"?> <odoo> <data> <record id="record_id" model="ir.ui.view"> <field name="name">foo.bar.form</field> <field name="model">baz.model</field> <field name="arch" type="xml"> <form string="My Form"> <sheet> <group> <field name="my_field"/> </group> </sheet> </form> </field> </record> <act_window id="action_quux" name="My Action" res_model="baz.model" view_model="form"/> </data> </odoo>
在验证时会生成消息,但没有迹象表明具体问题是

view_model

应该是
view_mode
。有没有办法获得更好的错误消息?

python xml odoo relaxng
1个回答
2
投票
至少在 Debian Linux 上,错误消息是由

LXML 的 RelaxNG 验证器生成的,而该验证器又依赖于 libxml2。我们可以看到 xmllint,也基于 libxml2

,产生相同的输出:

xmllint path/to/view.xml --relaxng ./odoo/odoo/import_xml.rng <snip xml file content/> path/to/view.xml:3: element data: Relax-NG validity error : Element odoo has extra content: data path/to/view.xml fails to validate
我们无法轻松更改 Odoo 验证 XML 文件的方式,但我们可以安装不同的验证器 

jing,并使用它在终端中验证我们的文件。

安装(在基于 Debian 的系统上):

$ sudo apt-get install jing libbatik-java libavalon-framework-java
安装后,像这样调用它并查看更详细的错误消息(为了便于阅读而格式化):

jing ./odoo/odoo/import_xml.rng path/to/view.xml path/to/view.xml:23:9: error: attribute "view_model" not allowed here; expected attribute "auto_refresh", "context", "domain", "groups", "key2", "limit", "multi", "src_model", "target", "usage", "view_id", "view_mode" or "view_type"
自 Odoo 13 起,

Odoo 本身提供了使用 jingtrang 包生成 jing 验证错误消息的可选支持。要启用此支持,请从 pypi 安装 jingtrang 模块。

© www.soinside.com 2019 - 2024. All rights reserved.