You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:23:33