XSLT: Добавление элемента только в случае если исходный тег содержит число

Иконка XSLT

Бывают случаи, когда при XSLT трансформации, в исходном XML некоторые теги могут содержать как число, так и строку. При этом мы хотим что бы в результирующем XML тег добавлялся только в том случае, когда исходный тег содержит число.

Например, в исходном XML имеем такой тег:

<SomeValue>1234</SomeValue>

После трансформации мы хотим получить тег  <SomeTransformedValue> с этим числом:

<SomeTransformedValue>1234</SomeTransformedValue>

Иногда тег <SomeValue> может содержать что то типа такого:

<SomeValue>Not set</SomeValue>

В таком случае, тег <SomeTransformedValue> вообще должен отсутствовать в результирующем XML.

Эта задача решается с помощь следующего XSLT:

<xsl:if test="SomeValue[string(number(text())) != 'NaN']">
  <xsl:element name="SomeTransformedValue">
    <xsl:value-of select="SomeValue"/>
  </xsl:element>
</xsl:if>

Важным элементом тут является XSLT элемент <xsl:if>, который и выполняет проверку содержит ли тег SomeValue число. Если условие выполнится, то елемент SomeTransformedValue будет добавлен.

Учтите что в этом примере я упростил XPath выбора элементов до простого названия тега. В вашем же случае он может быть посложнее. Но принцип с проверкой числа остается тот же.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>