Из комментария ОП:
Хорошо, это означает, что мой единственный вариант использует <xsl:choose>
..., правильно?
В то время, как выпопытка привести к непредсказуемым результатам по причинам, объясненным @Michael Kay и мной в моих комментариях, все еще есть способы сделать то, что вы хотите (создать либо значение атрибута attrib
, либо значение по умолчанию (0
) :
concat(@attrib,
substring(0, 2 -not(@attrib))
)
Создает значение атрибута attrib
(если этот атрибут присутствует) или (если нет) значение по умолчанию 0
.
Полное решение XSLT :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="x">
<xsl:value-of select=
"concat(@attrib,
substring('0', 2 -not(@attrib))
)"/>
==========
</xsl:template>
</xsl:stylesheet>
, когда это преобразование применяется к следующему документу XML :
<t>
<x attrib="abc"/>
<x/>
</t>
желаемый, правильный результат выдается :
abc
==========
0
==========