用于查找拆分为多个后代的文本的 XPath

XPath to find text split over multiple descendants

我有一个 OOXML(来自 Word .docx 文件)如下所示:

<w:tr>
    <w:tc>
        <w:p>
            <w:r>
                <w:t>~TABLE_xxx~</w:t>
            </w:r>
        </w:p>
    </w:tc>
</w:tr>
<w:tr>
    <w:tc>
        <w:p>
            <w:r>
                <w:t>~TABLE_</w:t>
            </w:r>
            <w:r w:rsidRPr="00FB4DC5">
                <w:t>xxx</w:t>
            </w:r>
            <w:r>
                <w:t>~</w:t>
            </w:r>
         </w:p>
     </w:tc>
</w:tr>

我想找到后代文本包含“~TABLE_xxx~”的所有元素。

我尝试了以下方法:

//w:tr[descendant::text()[contains(., "~TABLE_xxx~")]]

然而,这只匹配我文档的第一个 <w:tr>。我的猜测是,因为第二个文本拆分为不同的 <w:r>(文本的 "runs" 字),所以我找不到匹配项。

解决这个问题的方法是什么?

按 'xxx' 搜索不是一个选项吗?

//w:tr[descendant::text()[contains(., "xxx")]]

测试 文本节点 是错误的方法,尤其是对于 OOXML,它经常将字符串分成 w:r 运行。相反,测试 string-values.

这个 XPath,

//w:tr[contains(.,"~TABLE_xxx~")]

将 select 所有 w:tr 其字符串值包含目标字符串的元素。

另见: