XPath:如何 select 具有包含文本的兄弟节点的节点?
XPath: how to select node that have a sibling containing text?
我有一个 Word XML 文档,它是一个报告模板。在文档中放置真实数据的地方(在生成报告时)有数据标识符。
问题是:我应该使用什么 xpath 表达式将指定有给定数据标识符(即包含内部给定文本的单元格)的 table 行放入 <xsl:for-each>
元素?
Table 文档中的单元格文本使用元素 <w:t>
嵌套到 <w:r>
,然后是 <w:p>
、<w:tc>
、<w:tr>
最后进入 <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
与 match=w:tr[contains(.//w:t,'dataIdentifier')]
和 Xalan 来查找和处理这样的 table 行,但不幸的是它只找到那些 <w:tr>
具有 <w:t>
在第一个位置,即它不适用于这样的结构:
<w:tbl>
<w:tr>
...
<w:t>some text</w:t>
...
...
<w:t>dataIdentifier</w:t>
...
</w:tr>
</w:tbl>
什么是正确的 XPath 表达式,它将检查所有位置的 <w:tr>
兄弟姐妹?
P.S。由于系统设计,我仅限于 XSLT 1.0 =(
At this time I use xsl:template with
match=w:tr[contains(.//w:t,'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')]]">
我有一个 Word XML 文档,它是一个报告模板。在文档中放置真实数据的地方(在生成报告时)有数据标识符。
问题是:我应该使用什么 xpath 表达式将指定有给定数据标识符(即包含内部给定文本的单元格)的 table 行放入 <xsl:for-each>
元素?
Table 文档中的单元格文本使用元素 <w:t>
嵌套到 <w:r>
,然后是 <w:p>
、<w:tc>
、<w:tr>
最后进入 <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
与 match=w:tr[contains(.//w:t,'dataIdentifier')]
和 Xalan 来查找和处理这样的 table 行,但不幸的是它只找到那些 <w:tr>
具有 <w:t>
在第一个位置,即它不适用于这样的结构:
<w:tbl>
<w:tr>
...
<w:t>some text</w:t>
...
...
<w:t>dataIdentifier</w:t>
...
</w:tr>
</w:tbl>
什么是正确的 XPath 表达式,它将检查所有位置的 <w:tr>
兄弟姐妹?
P.S。由于系统设计,我仅限于 XSLT 1.0 =(
At this time I use xsl:template with match=w:tr[contains(.//w:t,'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')]]">