
Бывают случаи, когда при 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 выбора элементов до простого названия тега. В вашем же случае он может быть посложнее. Но принцип с проверкой числа остается тот же.