Odoo/OpenERP 中 XML 和 XPath 定位小结
1. XML 简介
XML 文档结构
- 文档首部:声明包含标签,例如 <?xml version="1.0" encoding="UTF-8"?>
- 文档主体:数据通过树形结构组织,包含元素节点、属性节点、子元素和文本内容。
- 根元素:一个格式正确的 XML 文档必须有一个且仅有一个根元素。
- XML 片段:没有根元素的 XML 文档称为 XML 片段。
特殊字符处理
使用 CDATA 段处理特殊字符:
<![CDATA[ 特殊字符如 <, >, &, ', " 等 ]]>
2. XPath 语言
树形结构
- XPath 将 XML 文档视为一个树形结构,节点包括元素、属性、文本、注释和处理指令。
- 使用路径表示法定位节点或节点集合。
节点类型
- 元素节点:如 <Config>、<Department>。
- 属性节点:如 id="1001"。
- 文本节点:元素中的文本内容。
路径表达式
- 绝对路径:从根节点开始,如 /Config/Department。
- 相对路径:从当前节点开始,如 ./Name 或 ../@id。
常用标识符
- child:默认标识符,表示子节点。
- self:当前节点。
- parent:上一级节点。
- descendant:子孙节点。
- attribute:属性节点。
路径简化
- 元素节点访问:/Config/Department
- 属性节点访问:/Config/Department/@id
- 子孙节点访问:/class//Name
- 任意节点访问:/Config/Department/*
- 相对路径:../@id 或 ./Name
3. XPath 元素定位条件
根据属性值筛选
- 定位具有属性 id 的 Director 元素:/class/Director[@id]
- 定位属性值为 1001 的 Director 元素:/class/Director[@id='1001']
或表达式
定位 Director 下的 Name 或 Age:/class/Director/Name|Age
4. 在 Odoo/OpenERP 中的应用
视图定义
使用 XML 定义视图结构。示例:
<record id="view_department_form" model="ir.ui.view"> <field name="name">department.form</field> <field name="model">department</field> <field name="arch" type="xml"> <form string="Department"> <field name="name"/> <field name="manager_id"/> </form> </field> </record>
XPath 用于视图继承
使用 xpath 标签定位和修改视图中的节点。示例:
<record id="view_department_form_inherit" model="ir.ui.view"> <field name="name">department.form.inherit</field> <field name="model">department</field> <field name="inherit_id" ref="view_department_form"/> <field name="arch" type="xml"> <xpath expr="//field[@name='manager_id']" position="after"> <field name="employee_ids"/> </xpath> </field> </record>
数据导入导出
使用 XPath 定位和操作 XML 数据。
5. 注意事项
- 在 XML 中正确处理特殊字符,使用 CDATA 段。
- 确保路径表达式正确,避免语法错误。
- 避免过于复杂的 XPath 表达式,以提高性能。
通过这些知识,您可以在 Odoo/OpenERP 中有效地使用 XML 和 XPath 进行视图定义、数据操作和模块开发。如果需要更详细的信息,可以参考 Odoo 的官方文档。