Xpath如何将div定位到另一个div?

时间:2016-08-14 12:04:27

标签: xpath odoo-8 openerp-8

我是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>

从铬检查员那里得到的结构:

enter image description here

提前感谢您的帮助。

2 个答案:

答案 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。