需要找到父节点id

时间:2011-03-28 10:50:35

标签: xslt

这是我的示例输入

<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的表的样式。

3 个答案:

答案 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%