计算XSL中数字的平方根

时间:2017-08-25 18:56:00

标签: xml function xslt math sqrt

我曾尝试过多次迭代计算XSL / XML中数字的平方根但无法使其正常工作。这是我最近的尝试。我收到错误“样式表中不存在命名模板'sqrt'。”这是我需要为此样式表编写的最后一点,然后我可以将我的项目转换为。-TIA

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
 xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:msxsl="urn:schemas-
 microsoft-com:xslt" xmlns:inr="http://mycompany.com/mynamespace">
<xsl:import href="sqrt.xsl" />

<xsl:template match="HorizontalLine | HorizontalCircle | HorizontalSpiral">
<xsl:if test="Start[@pointType = 'POB']">
    SqRt:
      <xsl:call-template name="sqrt">
        <xsl:with-param name="value" select="100"/>
      </xsl:call-template>
</xsl:if>
</xsl:template>

2 个答案:

答案 0 :(得分:2)

错误消息显示&#34;命名模板&#39; sqrt&#39;不存在&#34;。我们希望在sqrt.xsl中找到它,但您还没有向我们展示sqrt.xsl,因此我们可以推断出(a)它不存在,并且(b)您可能不了解导入是如何工作的,否则你就会明白这个消息并向我们展示代码。

有关如何在XSLT 1.0中计算平方根的示例,请参阅http://exslt.org/math/functions/sqrt/math.sqrt.template.xsl

另外两条评论:

(a)没有XSLT 1.1版。有一个1.1的草案(约2001年左右),但它被放弃了,从未超越草案状态。

(b)你说:&#34;这是我需要为这个样式表编写的最后一点,然后我可以在&#34;中转换我的项目。 (i)此信息与您的问题无关,并且(ii)它反映了您的经验不足,因为有经验的程序员知道您永远不会期望您当前正在处理的错误是最后一个。

答案 1 :(得分:0)

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:inr="http://mycompany.com/mynamespace" xmlns:math="http://exslt.org/math">
<xsl:import href="sqrt.xsl" />
<xsl:include href="../format.xsl"/>
<xsl:param name="xslRootDirectory" select="inr:xslRootDirectory"/>
<!-- List Coordinates with Station Report -->
<xsl:template match="/">
    <xsl:variable name="gridOut" select="inr:SetGridOut(number(InRoads/@outputGridScaleFactor))" />
    <html>
        <head>
            <link rel="stylesheet" type="text/css" href="{$xslRootDirectory}/_Themes/engineer/theme.css"/>
        </head>
        <body>
            <xsl:apply-templates/>
        </body>
    </html>
</xsl:template>
<!-- Element Point Data -->
<xsl:template match="HorizontalLine | HorizontalCircle | HorizontalSpiral">
    <xsl:variable name="startStation" select="Start/station/@internalStation"/>
    <xsl:variable name="endStation" select="End/station/@internalStation"/>
    <!-- This section is to force the PC to PI information -->
        <tr>
            <xsl:variable name="varElementNumber" select="@elementNumber - 1"/>
            <!-- Element DIST Section -->
            <xsl:variable name="varX1" select="PI/@easting"/>
            <xsl:variable name="varY1" select="PI/@northing"/>
            <xsl:variable name="varX2" select="Start/@easting"/>
            <xsl:variable name="varY2" select="Start/@northing"/>
            <td class="sidepad" align="center">
            varElementNumber: <xsl:value-of select = "$varElementNumber"/><br/>
            varX1: <xsl:value-of select = "$varX1"/><br/>
            varY1: <xsl:value-of select = "$varY1"/><br/>
            varX2: <xsl:value-of select = "$varX2"/><br/>
            varY2: <xsl:value-of select = "$varY2"/><br/>
            Distance: <xsl:value-of select = "($varX2 - $varX1) * ($varX2 - $varX1) + ($varY2 - $varY1) * ($varY2 - $varY1)"/><br/>
            SqRt:   
                <xsl:call-template name="math:sqrt">
                    <xsl:with-param name="number" select="25"/>
                </xsl:call-template>
            </td>
            <!-- End Station -->
        </tr>
</xsl:template>