с использованием XPath для выбора смежных элементов с определенным значением атрибута

У меня есть такой XML:

<span>1</span>
<span class="x">2</span>
<span class="x y">3</span>
<span class="x">4</span>
<span>5</span>
<span class="x">6</span>
<span>7</span>
<span class="x">8</span>

Я хочу использовать таблицу стилей XSLT для размещения содержимого всех элементов, чей атрибут class содержит x в один элемент . Таким образом, результат должен быть таким:

1 <x>234</x> 5 <x>6</x> 7 <x>8</x>

(или, в идеале,

1 <x>2<y>3</y>4</x> 5 <x>6</x> 7 <x>8</x>

, но эту проблему нужно решить, когда я ее решу.)

Это соответствующий фрагмент моего XSLT:

<xsl:template match="span[contains(@class,'x') and preceding-sibling::span[1][not(contains(@class,'x'))]]">
  <x><xsl:for-each select=". | following-sibling::span[contains(@class,'x')]">
    <xsl:value-of select="text()"/>
  </xsl:for-each></x>
</xsl:template>

<xsl:template match="span[contains(@class,'x') and preceding-sibling::span[1][contains(@class,'x')]]">
</xsl:template>

<xsl:template match="span">
  <xsl:value-of select="text()"/>
</xsl:template>

What это приводит к следующему:

1 <x>23468</x> 5 <x>68</x> 7 <x>8</x>

Я почти уверен, что мне нужно использовать счетчик в выражении XPath, чтобы он не выбирал все следующие элементы с классом x, а только смежные. Но как я могу посчитать смежные? Или я делаю это неправильно?

5
задан ptomato 22 January 2012 в 13:08
поделиться