MS Visual Studio поставляется в комплекте с процессором .NET XSLT XslCompiledTransform, и это процессор XSLT 1.0.
С другой стороны, min()
- это стандартная функция в XPath 2.0, а не в XPath 1.0. XSLT 1.0 использует только XPath 1.0.
Решение проблемы XSLT 1.0 :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="Earth">
<xsl:value-of select=
"@*[not(. > ../@*)][1]"/>
</xsl:template>
</xsl:stylesheet>
когда это преобразование применяется к следующему документу XML (поскольку вы его не предоставили!):
<Rings>
<Earth stamina="3" willpower="6"/>
</Rings>
желаемый, правильный результат получается :
3
В .NET можно использовать сторонний процессор XSLT 2.0, такой как Saxon.NET или XQSharp. Ниже представлено решение XSLT 2.0:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="Earth">
<xsl:sequence select="min(@*)[1]"/>
</xsl:template>
</xsl:stylesheet>