Xml 为什么减法和除法在XSLT中给我NaN?

Xml 为什么减法和除法在XSLT中给我NaN?,xml,xslt,xslt-1.0,nan,Xml,Xslt,Xslt 1.0,Nan,所以,我试着做一个符号导数计算器,它只需要一个小故障。它为我提供了这个XML <?xml version="1.0"?> <sum> <mono> <arg>3</arg> <var>x</var> <exp>2</exp> </mono> </sum> 3. x 2. 这个样式表给出了数字在

所以,我试着做一个符号导数计算器,它只需要一个小故障。它为我提供了这个XML

<?xml version="1.0"?>
<sum>
    <mono>  
        <arg>3</arg>
        <var>x</var>
        <exp>2</exp>
    </mono>
</sum>

3.
x
2.
这个样式表给出了数字在导数中应有的行为

<xsl:stylesheet version="1.0"        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match = "/">
    <mono>
        <arg>
            <xsl:value-of select="arg div exp"></xsl:value-of>
        </arg>
    <var>
        <xsl:if test="exp > 0"/>
        X
    </var>
    <exp>
        <xsl:value-of select="exp - 1"></xsl:value-of>
    </exp>
</mono>
</xsl:template>
</xsl:stylesheet>

X

您的主模板与根元素匹配:

<xsl:template match = "/">
然后您的NaN问题将消失,因为
arg
exp
元素现在实际上是当前
mono
元素的子元素,而它们以前不是
/
元素的子元素

以下是您的XSLT以及上面的一些其他改进:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="mono">
    <mono>
      <arg>
        <xsl:value-of select="arg div exp"></xsl:value-of>
      </arg>
      <var>
        <xsl:if test="exp > 0">X</xsl:if>
      </var>
      <exp>
        <xsl:value-of select="exp - 1"/>
      </exp>
    </mono>
  </xsl:template>
</xsl:stylesheet>

X
以下是XML输出,不包括请求的NAN:

<?xml version="1.0" encoding="UTF-8"?>
<mono>
   <arg>1.5</arg>
   <var>X</var>
   <exp>1</exp>
</mono>

1.5
X
1.
<?xml version="1.0" encoding="UTF-8"?>
<mono>
   <arg>1.5</arg>
   <var>X</var>
   <exp>1</exp>
</mono>