XSLT считает все элементы одного и того же элемента перед пустым узлом - PullRequest
0 голосов
/ 25 апреля 2018

Это скелет того типа XML-файлов, над которым я работаю.

<table><tr>
<td>x</td>
<td>y</td>
<td>q</td>
<td>z</td>
<td></td>
<td>o</td>
</tr></table>

Я хочу посчитать все элементы одного уровня перед первым пустым узлом.В примере я хочу вернуть 4 из элемента выше.

Я попытался <xsl:variable name="NumFields" select="count(preceding-sibling::table/tr[1]/td[.=''])" />, но он возвращает 0.

Что я делаю не так?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Найдите код ответа ниже

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="2.0">
    <xsl:template match="/">
        <xsl:value-of select="count(//tr[1]//td[. = ''][1]/preceding::td)"/>
    </xsl:template>
</xsl:stylesheet>
0 голосов
/ 25 апреля 2018

Предполагая, что вы находитесь на узле документа (точнее, на родительском узле table), вы хотите получить следующее выражение:

<xsl:value-of select="count(table/tr[1]/td[.=''][1]/preceding-sibling::*)" />

Если вы находитесь на узле table, просто сократите его до этого ...

<xsl:value-of select="count(tr[1]/td[.=''][1]/preceding-sibling::*)" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...