大家好,
很多朋友在odoo 开发的时候,都遇到需要使用 xpath 修改继承视图的情况。我们这里就简单总结一下xpath 是什么:[数据结构]
首先:,
我们希望告诉电脑,我们的组织是这样一个架构,通过xml实现:
如何写代码呢?
<?xml version="1.0" encoding="ISO-8859-1"?>
<openerp>
<odoohk>
<title lang="eng">Chief Executive Officer</title>
<position>Systems Engineer</position>
</odoohk>
<odoohk>
<title lang="eng">Vice President</title>
<position>Python Developer</position>
</odoohk>
<openerphk>
<title lang="eng">Senior Engineer</title>
<position>Node.js Developer</position>
</openerphk>
</openerp>
第二:语法
我们,查询架构中的人员
表达式 | 描述 |
---|---|
nodename | 选取此节点的所有子节点。 |
/ | 从根节点选取。 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
.. | 选取当前节点的父节点。 |
@ | 选取属性。 |
第三:路径语法
表达式 | 结果 |
---|---|
/openerp/odoohk[1] | 选取属于 openerp 子元素的第一个 odoohk 元素。 |
/openerp/odoohk[last()] | 选取属于openerp 子元素的最后一个 odoohk 元素。 |
/openerp/odoohk[last()-1] | 选取属于 openerp 子元素的倒数第二个 odoohk 元素。 |
/openerp/odoohk[position()<3] | 选取最前面的两个属于 openerp 元素的子元素的 odoohk 元素。 |
//title[@lang] | 选取所有拥有名为 lang 的属性的 title 元素。 |
//title[@lang=’eng’] | 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。 |
/openerp/odoohk[contains(.,'Developer')]/title | 选取 openerp 元素中的 odoohk 元素的所有 title 元素,且其中有元素且其值须含有 Developer。 |
第四:模糊查询节点
- | 匹配任何元素节点。
@* | 匹配任何属性节点。
node() | 匹配任何类型的节点。
实例
路径表达式 | 结果 |
---|---|
/openerp/* | 选取 openerp 元素的所有子元素。 |
//* | 选取文档中的所有元素。 |
//title[@*] | 选取所有带有属性的 title 元素。 |
第五:选取多条路径
通过在路径表达式中使用“|”运算符,选取多个路径。
//odoohk/title | //odoohk/position
选取 odoohk 元素的所有 title 和 position 元素。
//title | //position
选取文档中的所有 title 和 position 元素。
/openerp/odoohk/title | //position
选取属于 openerp 元素的 odoohk 元素的所有 title 元素,以及文档中所有的position 元素。
第六:轴
如图,我们需要找到标红星星的节点:
代码:
//odoohk[contains(text(), ‘Developer’)]/parent::openerp/odoohk[contains(text(), ‘Engineer’)]
标题1 | 标题2 |
---|---|
child::book | 选取所有属于当前节点的子元素的 odoohk节点。 |
attribute::lang | 选取当前节点的 lang 属性。 |
child::* | 选取当前节点的所有子元素。 |
attribute::* | 选取当前节点的所有属性。 |
child::text() | 选取当前节点的所有文本子节点。 |
child::node() | 选取当前节点的所有子节点。 |
descendant::odoohk | 选取当前节点的所有 odoohk 后代。 |
ancestor::odoohk | 选择当前节点的所有 odoohk 先辈。 |
ancestor-or-self::odoohk | 选取当前节点的所有 odoohk 先辈以及当前节点(如果此节点是 odoohk 节点) |
child::*/child::position | 选取当前节点的所有 position孙节点。 |
总结
谢谢大家!欢迎提供意见!