XPath:如何选择具有包含文本的兄弟节点的节点?

时间:2015-02-16 05:21:26

标签: xpath xslt-1.0 siblings

我有一个Word XML文档,它是一个报告模板。文档中的数据标识符位于放置实际数据的位置(在报告生成时)。

问题是:我应该使用什么xpath表达式将用给定数据标识符指定的表行(即包含内部给定文本的单元格)放入<xsl:for-each>元素中?

文档中的表格单元格文本的元素<w:t>嵌套在<w:r>中,然后嵌入<w:p><w:tc><w:tr>,最后导入{{ 1}}。所以结构看起来像这样:

<w:tbl>

目前我使用<w:tbl> <w:tr> <w:tc> <w:p> <w:r> <w:t>dataIdentifier</w:t> </w:r> </w:p> </w:tc> </w:tr> </w:tbl> xsl:template以及Xalan来查找和处理此类表行,但不幸的是,它只找到那些match=w:tr[contains(.//w:t,'dataIdentifier')]元素的<w:tr>元素位置,即它对这种结构不起作用:

<w:t>

什么是正确的XPath表达式,它将检查所有位置的<w:tbl> <w:tr> ... <w:t>some text</w:t> ... ... <w:t>dataIdentifier</w:t> ... </w:tr> </w:tbl> 兄弟姐妹?

P.S。由于系统设计,我仅限于XSLT 1.0 =(

1 个答案:

答案 0 :(得分:1)

  

此时我使用xsl:template   匹配= W:TR [含有(.//瓦特:吨, 'dataIdentifier')]

尝试改为:

<xsl:template match="w:tr[.//w:t[contains(., 'dataIdentifier')]]">

-
注意:如果知道w:t的完整路径,最好明确说明:

<xsl:template match="w:tr[w:tc/w:p/w:r/w:t[contains(., 'dataIdentifier')]]">