这是我的示例输入
<table id="1" style="width=100%">
<tr>
<td id="1">
<table id="2" style="width=50%">
<tr>
<td id="2">
</td>
</tr>
</table>
</td>
</tr>
</table>
我正在使用xslt1.0。当模板匹配'td'匹配时,我需要找到相应的表id值。例如,如果id = 1的td匹配,我想从table(id = 1)获取样式属性值,如果id = 2的td匹配,我想从table(id = 2)中取样式属性值。我在我的模板中写了ancestor::table/@style
,但两个td都引用了id = 1的表的样式。
答案 0 :(得分:1)
假设您处于'td'上下文中,请使用此XPath:
../../@style
针对您的样本测试XSLT:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="td">
<xsl:value-of select="../../@style"/>
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
结果:
width=100%width=50%
答案 1 :(得分:1)
我写过 我的
ancestor::table/@style
模板
你很亲密。由于table
轴中可以有多个ancestor
,因此您需要像ancestor::table[1]/@style
中那样获得第一个table
。当然,如果您绝对确定总是有一链tr
- > td
- &gt; tbody
(不是可选的{{1}})那么你可以使用@ Flack的答案。
答案 2 :(得分:1)
试试这个XPath它完美无缺
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="td">
<xsl:value-of select="ancestor::table[1]/@style"/>
<xsl:apply-templates/>
</xsl:template>
结果:
width=100%width=50%