2017-10-08 22 views
1

我一直有問題找到一種方法來計算一個字段不存在於其中一個學生的總數。當我對充電器進行總結時,我總是得到NaN。如果其中一項收費只存在於一名學生中,我該如何對收費人員進行總結。只有學生2有活動充電器,但第一個沒有。在XSLT中計算可能缺失的元素的總數?

<?xml version="1.0" encoding="utf-8" ?> 
<?xml-stylesheet type="text/xsl" href="students.xslt"?> 

<students> 
    <student id="0" type="grad"> 
    <lastname>Jones</lastname> 
    <firstname>Alan</firstname> 
    <gpa>3.51</gpa> 
    <chargers> 
     <tuition>1200</tuition> 
     <parking>35.20</parking> 
     <health>18.20</health> 
    </chargers> 
    </student> 
    <student id="001887" type="undergrad"> 
    <lastname>Chong</lastname> 
    <firstname>Susan</firstname> 
    <gpa>2.51</gpa> 
    <chargers> 
     <tuition>1645</tuition> 
     <activity>50.20</activity> 
     <parking>35.20</parking> 
     <health>22.50</health> 
    </chargers> 
    </student> 
</students> 

這就是我要如何計算總數。 <xsl:value-of select="sum(//chargers) "/> 什麼是最好的方法?

請問xsl:if測試會需要嗎?

<xsl:template match="chargers"> 
    <table> 
     <tr> 
     <b>Chargers:</b> 
     </tr> 
     <tr> 
     <td>Tuition:</td> 
     <td> 
      <xsl:value-of select="tuition"/> 
     </td> 
     </tr> 
     <xsl:if test="self::node()[activity]"> 
     <tr> 
     <td>Activity:</td> 
     <td> 
      <xsl:value-of select="activity"/> 
     </td> 
     </tr> 
     </xsl:if> 
     <tr> 
     <td>Parking:</td> 
     <td> 
      <xsl:value-of select="parking"/> 
     </td> 
     </tr> 
     <tr> 
     <td>health:</td> 
     <td> 
      <xsl:value-of select="health"/> 
     </td> 
     </tr> 
     <tr> 
     <td colspan="2">Total Chargers:</td> 
     <td> 
      <xsl:value-of select="sum(//chargers) "/> 
     </td> 
     </tr> 
     </table> 
</xsl:template> 

回答

0

第一個問題是不是activity可能會丟失,而是您要選擇的chargers元素時,你應該選擇chargers元素的兒童。

變化

 <xsl:value-of select="sum(//chargers) "/> 

 <xsl:value-of select="sum(//chargers/*) "/> 

選擇文檔中所有的chargers元素的兒童。

第二個問題是,您可能並不是真的想要跨文檔中所有chargers元素的所有chargers子元素進行求和。相反,您可能想要爲您匹配的特定chargers元素總結charger元素子元素。

如果是這樣,那麼改變

 <xsl:value-of select="sum(//chargers/*) "/> 

 <xsl:value-of select="sum(*) "/> 

在你的模板匹配chargers