Odoo 10中使用XPath contains()替换模板内容的技术咨询
Odoo 10: 用XPath替换第一个含“Weight”的模板元素
嘿,我来帮你搞定这个Odoo模板的替换需求!要选中第一个包含“Weight”文本的元素并替换成“test”,你可以通过调整XPath表达式和Odoo的模板继承语法来实现。
首先,先明确核心的XPath定位逻辑:我们需要匹配所有文本中包含“Weight”的元素,然后通过[1]限定只取第一个匹配项。为了避免文本前后空格或换行导致匹配失败,建议用normalize-space()来处理文本内容。
下面是整合了你现有代码的完整模板示例:
<odoo> <template id="report_delivery_document2" inherit_id="stock.report_delivery_document"> <!-- 你原本添加Carrier表头的代码 --> <xpath expr="//th[@name='td_sched_date_h']" position="after"> <th t-if="o.picking_type_id.code == 'outgoing' and o.carrier_id"><strong>Carrier</strong></th> <th t-if="o.weight"><strong>Weight</strong></th> </xpath> <!-- 新增的替换逻辑:选中第一个含Weight的元素并替换为test --> <xpath expr="//*[contains(normalize-space(text()), 'Weight')][1]" position="replace"> test </xpath> </template> </odoo>
关键细节解释:
- XPath表达式:
//*[contains(normalize-space(text()), 'Weight')][1]//*:匹配任意类型的元素(不管是<th>、<td>还是其他标签)normalize-space(text()):去除文本前后的空白字符,同时将中间的多个空格合并为一个,避免因格式问题导致匹配失败contains(..., 'Weight'):检查处理后的文本是否包含“Weight”关键词[1]:确保只选中第一个符合条件的元素
- position="replace":告诉Odoo用
<xpath>标签内的内容(也就是“test”)完全替换掉选中的元素
如果你的场景中确定只有<th>标签会包含“Weight”,也可以把XPath更精准一点,比如//th[contains(normalize-space(text()), 'Weight')][1],这样能减少不必要的元素匹配。
内容的提问来源于stack exchange,提问作者anarkiisto
相关产品推荐
相关产品推荐

