用于查找拆分为多个后代的文本的 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
其字符串值包含目标字符串的元素。
另见:
我有一个 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
其字符串值包含目标字符串的元素。
另见: