XSLT - фильтрация - PullRequest
       7

XSLT - фильтрация

2 голосов
/ 07 апреля 2009

У меня есть повторяющееся дерево 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>

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

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

Ответы [ 4 ]

5 голосов
/ 07 апреля 2009
<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>
0 голосов
/ 07 апреля 2009

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

/xml/item[ position() &lt; 3 ]/color
0 голосов
/ 07 апреля 2009

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

/xml/item[position() &lt; 3]/color
0 голосов
/ 07 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...