我是odoo和xpath的新手。谷歌搜索和阅读堆栈中的所有类似问题。我找不到解决问题的方法:
如何使用xpath将div定位到另一个div?
首先是我未能达到目标的尝试:
<?xml version="1.0" encoding="utf-8" ?>
<openerp>
<data>
<!-- Customize header -->
<template id="custom_header" inherit_id="website.layout" name="Custom Header">
<xpath expr="//div[@id='wrapwrap']/main/div[1]" position="attributes">
<attribute name="id">my_target</attribute>
</xpath>
<xpath expr="//div[@class='oe_structure oe_empty']" position="attributes">
<attribute name="id">my_target</attribute>
</xpath>
<xpath expr="//div[@id='wrapwrap']/main/following-sibling::div[1]/data()" position="attributes">
<attribute name="id">my_target</attribute>
</xpath>
<xpath expr="//div[@id='wrapwrap']/main/following-sibling::div[1]" position="attributes">
<attribute name="id">my_target</attribute>
</xpath>
</template>
</data>
</openerp>
我有错误:
元素'....'不能位于父视图中。
但是,我在另一个任务中使用以下表达式并且它运行良好:
<?xml version="1.0" encoding="utf-8" ?>
<openerp>
<data>
<!-- Customize header -->
<template id="custom_header" inherit_id="website.layout" name="Custom Header">
<xpath expr="//div[@id='wrapwrap']/header" position="attributes">
<attribute name="id">my_header</attribute>
</xpath>
</template>
</data>
</openerp>
从铬检查员那里得到的结构:
提前感谢您的帮助。
答案 0 :(得分:1)
我想指出的主要问题是,在XML模板中,您修改的不是浏览器的Developer工具中可见的完整视图,而是父XML模板本身 。
在这种情况下,您正在修改website.layout
属性指示的inherit_id="website.layout"
。您应该打开该模板并尝试根据它包含的内容修改元素,而不是浏览器中的最终结果。
答案 1 :(得分:0)
以下是一些有效的例子:
这些用于使用id wrap定位div:
//div[@id='wrapwrap']//div[@id='wrap']
//main/div[@id='wrap']
//div[@id='wrap']
用于查找具有类&#39;容器oe_website_sale&#39;的div的div。更换 @id =&#39;包裹&#39; 同 @class =&#39; container oe_website_sale&#39;
基于id,你也可以用类和类值替换id。