Вам нужно будет показать точные детали входных образцов, в вашем тексте вы говорите «некоторые файлы не будут иметь поля», в вашем коде у вас есть проверка «ns2: value! = Null»что, на мой взгляд, не имеет особого смысла, поскольку правая часть «null» будет пытаться выбрать элемент с таким именем null
.Поэтому, поскольку большинство людей задают аналогичные вопросы, вы недостаточно хорошо объяснили, какие данные вы ожидаете и в какой результат вы хотите преобразовать их, в частности то, что вы считаете «нулевым» значением в контексте XML (например, схема XSD имеетxsi:nil
атрибут для этого).
В общем, если вы хотите преобразовать ns2:value
элементы в Namespace:hasThisValue
элементы, вы бы написали шаблон
<xsl:template match="ns2:value">
<Namespace:hasThisValue>
<xsl:value-of select="."/>
</Namespace:hasThisValue>
</xsl:template>
и просто гарантировали, что дальнейшиевверх по иерархии у вас есть <xsl:apply-templates/>
.