XSLT — Фильтрация

У меня есть повторяющееся xml-дерево, подобное этому -

<xml>
  <head>this is a sample xml file</head>
  <item><color>yellow</color><color>red</color></item>
  <item><color>blue</color></item>
  <item><color>grey</color><color>red</color><color>blue</color></item>
</xml>

Как видите, каждый элемент может иметь различное количество цветовых тегов.

Я хочу получить все цветовые метки только для первых двух элементов.


person Community    schedule 07.04.2009    source источник


Ответы (4)


<xsl:template match="xml">
  <xsl:apply-templates select="item[position() &lt; 3]/color" />
</xsl:template>

<xsl:template match="color">
  <xsl:copy-of select="." />
</xsl:template>

Применительно к вашему XML это дает:

<color>yellow</color>
<color>red</color>
<color>blue</color>
person Tomalak    schedule 07.04.2009

Один потенциальный возможный способ получить элементы, который является технически совершенно правильным и никоим образом не делает предположений о структуре вашего документа в отношении пространства имен, будущих требований или построения шаблона, очень прост:

/xml/item[position() &lt; 3]/color
person annakata    schedule 07.04.2009

Попробуй это...

/xml/item[ position() &lt; 3 ]/color
person David    schedule 07.04.2009

Добавьте порядковое поле к каждому элементу и выберите первые два.

person Dave Swersky    schedule 07.04.2009