Это скелет того типа файлов 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.
Что я делаю неправильно?
Спасибо.





Предполагая, что вы находитесь на узле документа (или, скорее, на родительском узле 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::*)" />
Найдите код ответа ниже
<?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>
Спасибо большое, отлично поработали. Очень ценю.