#c# #xml #xslt
#c# #xml #xslt
Вопрос:
У меня есть xml со списком автомобилей, которые выглядят следующим образом
<Car>
<color>red</color>
<type>toyota</type>
</Car>
<Car>
<color>green</color>
<type>mazda</type>
</Car>
<Car>
<color>yellow</color>
<type>ford</type>
</Car>
В настоящее время я получаю всю информацию о cars с помощью xslt следующим образом
<Cars>
<xsl:for-each select="//list/record/car">
<Car>
<color>
<xsl:value-of select="Color"/>
</color>
<type>
<xsl:value-of select="Type"/>
</type>
</Car>
</xsl:for-each>
</Cars>
Я хочу получить только элементы последнего car в списке с помощью xslt, чтобы мой новый xml имел одну запись car вместо 3 и выглядел так:
<Car>
<color>yellow</color>
<type>ford</type>
</Car>
Ответ №1:
Используется last()
для получения последнего элемента. Например: <xsl:for-each select="//list/record/car[last()]">
Если вы извлекаете только один элемент, вы можете удалить xsl:for-each
. Например:
<Cars>
<Car>
<color><xsl:value-of select="//list/record/car[last()]/Color"/></color>
<type><xsl:value-of select="//list/record/car[last()]/Type"/></type>
</Car>
</Cars>
Также в зависимости от структуры вашего XML вы можете сократить его до:
<Cars>
<Car>
<color><xsl:value-of select="//car[last()]/Color"/></color>
<type><xsl:value-of select="//car[last()]/Type"/></type>
</Car>
</Cars>
Обновление — Как указывает @michael.hor257k, код можно упростить с помощью copy-of
. Однако похоже, что xpath имеет другую оболочку для вывода.
<Cars>
<Car>
<xsl:copy-of select="//Car[last()]"/>
</Car>
</Cars>
Примечание: ваш xml имеет Cars
и ваш рабочий xpath имеет cars
. Возможно, вам захочется дважды проверить правильность заполнения.*
Комментарии:
1. Или просто:
<xsl:copy-of select="//Car[last()]"/>
.