Нужно найти идентификатор родительского узла - PullRequest
0 голосов
/ 28 марта 2011

Это мой пример ввода

<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', мне нужно найти соответствующее значение идентификатора таблицы. Например, если совпадает td с id = 1, я хочу взять значение атрибута стиля из таблицы (id = 1)если td с id = 2 совпадает, я хочу взять значение атрибута стиля из таблицы (id = 2).Я написал ancestor::table/@style в своем шаблоне, но оба тд ссылаются на стили таблицы с id = 1.

Ответы [ 3 ]

1 голос
/ 28 марта 2011

Я написал ancestor::table/@style в моем шаблоне

Вы были близки.Поскольку на оси ancestor может быть более одного table, вам нужно получить первый, как в ancestor::table[1]/@style.Конечно, если вы абсолютно уверены, что всегда есть цепочка table -> tr -> td (не обязательно tbody), тогда вы можете использовать ответ @ Flack.

1 голос
/ 14 декабря 2011

Попробуйте этот 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%
1 голос
/ 28 марта 2011

Если вы находитесь в контексте '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%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...